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>
		
			
				
	
	
		
			998 lines
		
	
	
		
			43 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			998 lines
		
	
	
		
			43 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
 | 
						|
#
 | 
						|
 | 
						|
'''
 | 
						|
CommonXml
 | 
						|
'''
 | 
						|
 | 
						|
##
 | 
						|
# Import Modules
 | 
						|
#
 | 
						|
 | 
						|
from Core.DistributionPackageClass import DistributionPackageHeaderObject
 | 
						|
from Library.StringUtils import ConvertNEToNOTEQ
 | 
						|
from Library.StringUtils import ConvertNOTEQToNE
 | 
						|
from Library.StringUtils import GetSplitValueList
 | 
						|
from Library.StringUtils import GetStringOfList
 | 
						|
from Library.Xml.XmlRoutines import XmlElement
 | 
						|
from Library.Xml.XmlRoutines import XmlElement2
 | 
						|
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 Library.UniClassObject import ConvertSpecialUnicodes
 | 
						|
from Library.UniClassObject import GetLanguageCode1766
 | 
						|
from Object.POM.CommonObject import FileObject
 | 
						|
from Object.POM.CommonObject import MiscFileObject
 | 
						|
from Object.POM.CommonObject import UserExtensionObject
 | 
						|
from Object.POM.CommonObject import ClonedRecordObject
 | 
						|
from Object.POM.CommonObject import LibraryClassObject
 | 
						|
from Object.POM.CommonObject import FileNameObject
 | 
						|
from Object.POM.ModuleObject import ModuleObject
 | 
						|
from Xml.XmlParserMisc import IsRequiredItemListNull
 | 
						|
from Xml.XmlParserMisc import GetHelpTextList
 | 
						|
import Library.DataType as DataType
 | 
						|
 | 
						|
##
 | 
						|
# ClonedFromXml
 | 
						|
#
 | 
						|
class ClonedFromXml(object):
 | 
						|
    def __init__(self):
 | 
						|
        self.GUID = ''
 | 
						|
        self.Version = ''
 | 
						|
 | 
						|
    def FromXml(self, Item, Key):
 | 
						|
        self.GUID = XmlElement(Item, '%s/GUID' % Key)
 | 
						|
        self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')
 | 
						|
        if self.GUID == '' and self.Version == '':
 | 
						|
            return None
 | 
						|
        ClonedFrom = ClonedRecordObject()
 | 
						|
        ClonedFrom.SetPackageGuid(self.GUID)
 | 
						|
        ClonedFrom.SetPackageVersion(self.Version)
 | 
						|
        return ClonedFrom
 | 
						|
 | 
						|
    def ToXml(self, ClonedFrom, Key):
 | 
						|
        if self.GUID:
 | 
						|
            pass
 | 
						|
        Element1 = CreateXmlElement('GUID', ClonedFrom.GetPackageGuid(), [],
 | 
						|
                                    [['Version', ClonedFrom.GetPackageVersion()]])
 | 
						|
        AttributeList = []
 | 
						|
        NodeList = [Element1]
 | 
						|
        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | 
						|
        return Root
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        return "GUID = %s Version = %s" % (self.GUID, self.Version)
 | 
						|
 | 
						|
 | 
						|
##
 | 
						|
# CommonDefinesXml
 | 
						|
#
 | 
						|
class CommonDefinesXml(object):
 | 
						|
    def __init__(self):
 | 
						|
        self.Usage = ''
 | 
						|
        self.SupArchList = []
 | 
						|
        self.SupModList = []
 | 
						|
        self.FeatureFlag = ''
 | 
						|
 | 
						|
    def FromXml(self, Item, Key):
 | 
						|
        if Key:
 | 
						|
            pass
 | 
						|
        self.Usage = XmlAttribute(Item, 'Usage')
 | 
						|
        self.SupArchList = \
 | 
						|
        [Arch for Arch in GetSplitValueList(XmlAttribute(Item, 'SupArchList'), DataType.TAB_SPACE_SPLIT) if Arch]
 | 
						|
        self.SupModList = \
 | 
						|
        [Mod for Mod in GetSplitValueList(XmlAttribute(Item, 'SupModList'), DataType.TAB_SPACE_SPLIT) if Mod]
 | 
						|
        self.FeatureFlag = ConvertNOTEQToNE(XmlAttribute(Item, 'FeatureFlag'))
 | 
						|
 | 
						|
    def ToXml(self):
 | 
						|
        pass
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        return "Usage = %s SupArchList = %s SupModList = %s FeatureFlag = %s" \
 | 
						|
                % (self.Usage, self.SupArchList, self.SupModList, self.FeatureFlag)
 | 
						|
 | 
						|
##
 | 
						|
# PromptXml
 | 
						|
#
 | 
						|
class PromptXml(object):
 | 
						|
    def __init__(self):
 | 
						|
        self.Prompt = ''
 | 
						|
        self.Lang = ''
 | 
						|
 | 
						|
    def FromXml(self, Item, Key):
 | 
						|
        if Key:
 | 
						|
            pass
 | 
						|
        self.Prompt = XmlElement2(Item, 'Prompt')
 | 
						|
        self.Lang = XmlAttribute(Item, 'Lang')
 | 
						|
 | 
						|
    def ToXml(self, Prompt, Key='Prompt'):
 | 
						|
        if self.Prompt:
 | 
						|
            pass
 | 
						|
        return CreateXmlElement('%s' % Key, Prompt.GetString(), [], [['Lang', Prompt.GetLang()]])
 | 
						|
    def __str__(self):
 | 
						|
        return "Prompt = %s Lang = %s" % (self.Prompt, self.Lang)
 | 
						|
 | 
						|
##
 | 
						|
# HelpTextXml
 | 
						|
#
 | 
						|
class HelpTextXml(object):
 | 
						|
    def __init__(self):
 | 
						|
        self.HelpText = ''
 | 
						|
        self.Lang = ''
 | 
						|
 | 
						|
    def FromXml(self, Item, Key):
 | 
						|
        if Key:
 | 
						|
            pass
 | 
						|
        self.HelpText = XmlElement2(Item, 'HelpText')
 | 
						|
        self.Lang = XmlAttribute(Item, 'Lang')
 | 
						|
 | 
						|
    def ToXml(self, HelpText, Key='HelpText'):
 | 
						|
        if self.HelpText:
 | 
						|
            pass
 | 
						|
        return CreateXmlElement('%s' % Key, HelpText.GetString(), [], [['Lang', HelpText.GetLang()]])
 | 
						|
    def __str__(self):
 | 
						|
        return "HelpText = %s Lang = %s" % (self.HelpText, self.Lang)
 | 
						|
 | 
						|
##
 | 
						|
# HeaderXml
 | 
						|
#
 | 
						|
class HeaderXml(object):
 | 
						|
    def __init__(self):
 | 
						|
        self.Name = ''
 | 
						|
        self.BaseName = ''
 | 
						|
        self.GUID = ''
 | 
						|
        self.Version = ''
 | 
						|
        self.CopyrightList = []
 | 
						|
        self.LicenseList = []
 | 
						|
        self.AbstractList = []
 | 
						|
        self.DescriptionList = []
 | 
						|
 | 
						|
    def FromXml(self, Item, Key, IsRequiredCheck=False, IsStandAlongModule=False):
 | 
						|
        if not Item and IsRequiredCheck:
 | 
						|
            XmlTreeLevel = []
 | 
						|
            if IsStandAlongModule:
 | 
						|
                XmlTreeLevel = ['DistributionPackage', 'ModuleSurfaceArea']
 | 
						|
            else:
 | 
						|
                XmlTreeLevel = ['DistributionPackage', 'PackageSurfaceArea', 'ModuleSurfaceArea']
 | 
						|
            CheckDict = {'Header':''}
 | 
						|
            IsRequiredItemListNull(CheckDict, XmlTreeLevel)
 | 
						|
        self.Name = XmlElement(Item, '%s/Name' % Key)
 | 
						|
        self.BaseName = XmlAttribute(XmlNode(Item, '%s/Name' % Key), 'BaseName')
 | 
						|
        self.GUID = XmlElement(Item, '%s/GUID' % Key)
 | 
						|
        self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')
 | 
						|
 | 
						|
        for SubItem in XmlList(Item, '%s/Abstract' % Key):
 | 
						|
            HeaderAbstractLang = XmlAttribute(SubItem, 'Lang')
 | 
						|
            self.AbstractList.append((HeaderAbstractLang, XmlElement(SubItem, '%s/Abstract' % Key)))
 | 
						|
        for SubItem in XmlList(Item, '%s/Description' % Key):
 | 
						|
            HeaderDescriptionLang = XmlAttribute(SubItem, 'Lang')
 | 
						|
            self.DescriptionList.append((HeaderDescriptionLang, XmlElement(SubItem, '%s/Description' % Key)))
 | 
						|
        for SubItem in XmlList(Item, '%s/Copyright' % Key):
 | 
						|
            HeaderCopyrightLang = XmlAttribute(SubItem, 'Lang')
 | 
						|
            self.CopyrightList.append((HeaderCopyrightLang, XmlElement(SubItem, '%s/Copyright' % Key)))
 | 
						|
        for SubItem in XmlList(Item, '%s/License' % Key):
 | 
						|
            HeaderLicenseLang = XmlAttribute(SubItem, 'Lang')
 | 
						|
            self.LicenseList.append((HeaderLicenseLang, XmlElement(SubItem, '%s/License' % Key)))
 | 
						|
        ModuleHeader = ModuleObject()
 | 
						|
        ModuleHeader.SetName(self.Name)
 | 
						|
        ModuleHeader.SetBaseName(self.BaseName)
 | 
						|
        ModuleHeader.SetGuid(self.GUID)
 | 
						|
        ModuleHeader.SetVersion(self.Version)
 | 
						|
        ModuleHeader.SetCopyright(self.CopyrightList)
 | 
						|
        ModuleHeader.SetLicense(self.LicenseList)
 | 
						|
        ModuleHeader.SetAbstract(self.AbstractList)
 | 
						|
        ModuleHeader.SetDescription(self.DescriptionList)
 | 
						|
        return ModuleHeader
 | 
						|
 | 
						|
    def ToXml(self, Header, Key):
 | 
						|
        if self.GUID:
 | 
						|
            pass
 | 
						|
        Element1 = CreateXmlElement('Name', Header.GetName(), [], [['BaseName', Header.GetBaseName()]])
 | 
						|
        Element2 = CreateXmlElement('GUID', Header.GetGuid(), [], [['Version', Header.GetVersion()]])
 | 
						|
        NodeList = [Element1,
 | 
						|
                    Element2,
 | 
						|
                    ]
 | 
						|
 | 
						|
        UNIInfAbstractList = []
 | 
						|
        UNIInfDescriptionList = []
 | 
						|
        # Get Abstract and Description from Uni File
 | 
						|
        # if the Uni File exists
 | 
						|
        if Header.UniFileClassObject is not None:
 | 
						|
            UniStrDict = Header.UniFileClassObject.OrderedStringList
 | 
						|
            for Lang in UniStrDict:
 | 
						|
                for StringDefClassObject in UniStrDict[Lang]:
 | 
						|
                    if not StringDefClassObject.StringValue:
 | 
						|
                        continue
 | 
						|
                    if StringDefClassObject.StringName == DataType.TAB_INF_ABSTRACT:
 | 
						|
                        UNIInfAbstractList.append((GetLanguageCode1766(Lang),
 | 
						|
                                                   ConvertSpecialUnicodes(StringDefClassObject.StringValue)))
 | 
						|
 | 
						|
                    if StringDefClassObject.StringName == DataType.TAB_INF_DESCRIPTION:
 | 
						|
                        UNIInfDescriptionList.append((GetLanguageCode1766(Lang),
 | 
						|
                                                      ConvertSpecialUnicodes(StringDefClassObject.StringValue)))
 | 
						|
 | 
						|
        # Get Abstract and Description from INF File Header
 | 
						|
        for (Lang, Value) in Header.GetCopyright():
 | 
						|
            if Value:
 | 
						|
                NodeList.append(CreateXmlElement('Copyright', Value, [], []))
 | 
						|
        for (Lang, Value) in Header.GetLicense():
 | 
						|
            if Value:
 | 
						|
                NodeList.append(CreateXmlElement('License', Value, [], []))
 | 
						|
        for (Lang, Value) in Header.GetAbstract() + UNIInfAbstractList:
 | 
						|
            if Value:
 | 
						|
                NodeList.append(CreateXmlElement('Abstract', Value, [], [['Lang', Lang]]))
 | 
						|
        for (Lang, Value) in Header.GetDescription() + UNIInfDescriptionList:
 | 
						|
            if Value:
 | 
						|
                NodeList.append(CreateXmlElement('Description', Value, [], [['Lang', Lang]]))
 | 
						|
 | 
						|
        AttributeList = []
 | 
						|
        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | 
						|
        return Root
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        return "Name = %s BaseName = %s GUID = %s Version = %s Copyright = %s \
 | 
						|
        License = %s Abstract = %s Description = %s" % \
 | 
						|
        (self.Name, self.BaseName, self.GUID, self.Version, self.CopyrightList, \
 | 
						|
         self.LicenseList, self.AbstractList, self.DescriptionList)
 | 
						|
##
 | 
						|
# DistributionPackageHeaderXml
 | 
						|
#
 | 
						|
class DistributionPackageHeaderXml(object):
 | 
						|
    def __init__(self):
 | 
						|
        self.Header = HeaderXml()
 | 
						|
        self.ReadOnly = ''
 | 
						|
        self.RePackage = ''
 | 
						|
        self.Vendor = ''
 | 
						|
        self.Date = ''
 | 
						|
        self.Signature = ''
 | 
						|
        self.XmlSpecification = ''
 | 
						|
 | 
						|
    def FromXml(self, Item, Key):
 | 
						|
        if not Item:
 | 
						|
            return None
 | 
						|
        self.ReadOnly = XmlAttribute(XmlNode(Item, '%s' % Key), 'ReadOnly')
 | 
						|
        self.RePackage = XmlAttribute(XmlNode(Item, '%s' % Key), 'RePackage')
 | 
						|
        self.Vendor = XmlElement(Item, '%s/Vendor' % Key)
 | 
						|
        self.Date = XmlElement(Item, '%s/Date' % Key)
 | 
						|
        self.Signature = XmlElement(Item, '%s/Signature' % Key)
 | 
						|
        self.XmlSpecification = XmlElement(Item, '%s/XmlSpecification' % Key)
 | 
						|
        self.Header.FromXml(Item, Key)
 | 
						|
        DistributionPackageHeader = DistributionPackageHeaderObject()
 | 
						|
        if self.ReadOnly.upper() == 'TRUE':
 | 
						|
            DistributionPackageHeader.ReadOnly = True
 | 
						|
        elif self.ReadOnly.upper() == 'FALSE':
 | 
						|
            DistributionPackageHeader.ReadOnly = False
 | 
						|
        if self.RePackage.upper() == 'TRUE':
 | 
						|
            DistributionPackageHeader.RePackage = True
 | 
						|
        elif self.RePackage.upper() == 'FALSE':
 | 
						|
            DistributionPackageHeader.RePackage = False
 | 
						|
        DistributionPackageHeader.Vendor = self.Vendor
 | 
						|
        DistributionPackageHeader.Date = self.Date
 | 
						|
        DistributionPackageHeader.Signature = self.Signature
 | 
						|
        DistributionPackageHeader.XmlSpecification = self.XmlSpecification
 | 
						|
        DistributionPackageHeader.SetName(self.Header.Name)
 | 
						|
        DistributionPackageHeader.SetBaseName(self.Header.BaseName)
 | 
						|
        DistributionPackageHeader.SetGuid(self.Header.GUID)
 | 
						|
        DistributionPackageHeader.SetVersion(self.Header.Version)
 | 
						|
        DistributionPackageHeader.SetCopyright(self.Header.CopyrightList)
 | 
						|
        DistributionPackageHeader.SetLicense(self.Header.LicenseList)
 | 
						|
        DistributionPackageHeader.SetAbstract(self.Header.AbstractList)
 | 
						|
        DistributionPackageHeader.SetDescription(self.Header.DescriptionList)
 | 
						|
        return DistributionPackageHeader
 | 
						|
 | 
						|
    def ToXml(self, DistributionPackageHeader, Key):
 | 
						|
        if self.Header:
 | 
						|
            pass
 | 
						|
        Element1 = CreateXmlElement('Name', \
 | 
						|
                                    DistributionPackageHeader.GetName(), [], \
 | 
						|
                                    [['BaseName', \
 | 
						|
                                    DistributionPackageHeader.GetBaseName()]])
 | 
						|
        Element2 = CreateXmlElement('GUID', \
 | 
						|
                                    DistributionPackageHeader.GetGuid(), [], \
 | 
						|
                                    [['Version', \
 | 
						|
                                    DistributionPackageHeader.GetVersion()]])
 | 
						|
        AttributeList = []
 | 
						|
        if DistributionPackageHeader.ReadOnly != '':
 | 
						|
            AttributeList.append(['ReadOnly', str(DistributionPackageHeader.ReadOnly).lower()])
 | 
						|
        if DistributionPackageHeader.RePackage != '':
 | 
						|
            AttributeList.append(['RePackage', str(DistributionPackageHeader.RePackage).lower()])
 | 
						|
        if DistributionPackageHeader.GetAbstract():
 | 
						|
            DPAbstract = DistributionPackageHeader.GetAbstract()[0][1]
 | 
						|
        else:
 | 
						|
            DPAbstract = ''
 | 
						|
        if DistributionPackageHeader.GetDescription():
 | 
						|
            DPDescription = DistributionPackageHeader.GetDescription()[0][1]
 | 
						|
        else:
 | 
						|
            DPDescription = ''
 | 
						|
        if DistributionPackageHeader.GetCopyright():
 | 
						|
            DPCopyright = DistributionPackageHeader.GetCopyright()[0][1]
 | 
						|
        else:
 | 
						|
            DPCopyright = ''
 | 
						|
        if DistributionPackageHeader.GetLicense():
 | 
						|
            DPLicense = DistributionPackageHeader.GetLicense()[0][1]
 | 
						|
        else:
 | 
						|
            DPLicense = ''
 | 
						|
        NodeList = [Element1,
 | 
						|
                    Element2,
 | 
						|
                    ['Vendor', DistributionPackageHeader.Vendor],
 | 
						|
                    ['Date', DistributionPackageHeader.Date],
 | 
						|
                    ['Copyright', DPCopyright],
 | 
						|
                    ['License', DPLicense],
 | 
						|
                    ['Abstract', DPAbstract],
 | 
						|
                    ['Description', DPDescription],
 | 
						|
                    ['Signature', DistributionPackageHeader.Signature],
 | 
						|
                    ['XmlSpecification', \
 | 
						|
                     DistributionPackageHeader.XmlSpecification],
 | 
						|
                    ]
 | 
						|
        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | 
						|
        return Root
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        return "ReadOnly = %s RePackage = %s Vendor = %s Date = %s \
 | 
						|
        Signature = %s XmlSpecification = %s %s" % \
 | 
						|
        (self.ReadOnly, self.RePackage, self.Vendor, self.Date, \
 | 
						|
         self.Signature, self.XmlSpecification, self.Header)
 | 
						|
##
 | 
						|
# PackageHeaderXml
 | 
						|
#
 | 
						|
class PackageHeaderXml(object):
 | 
						|
    def __init__(self):
 | 
						|
        self.Header = HeaderXml()
 | 
						|
        self.PackagePath = ''
 | 
						|
 | 
						|
    def FromXml(self, Item, Key, PackageObject2):
 | 
						|
        if not Item:
 | 
						|
            XmlTreeLevel = ['DistributionPackage', 'PackageSurfaceArea']
 | 
						|
            CheckDict = {'PackageHeader': None, }
 | 
						|
            IsRequiredItemListNull(CheckDict, XmlTreeLevel)
 | 
						|
        self.PackagePath = XmlElement(Item, '%s/PackagePath' % Key)
 | 
						|
        self.Header.FromXml(Item, Key)
 | 
						|
        PackageObject2.SetName(self.Header.Name)
 | 
						|
        PackageObject2.SetBaseName(self.Header.BaseName)
 | 
						|
        PackageObject2.SetGuid(self.Header.GUID)
 | 
						|
        PackageObject2.SetVersion(self.Header.Version)
 | 
						|
        PackageObject2.SetCopyright(self.Header.CopyrightList)
 | 
						|
        PackageObject2.SetLicense(self.Header.LicenseList)
 | 
						|
        PackageObject2.SetAbstract(self.Header.AbstractList)
 | 
						|
        PackageObject2.SetDescription(self.Header.DescriptionList)
 | 
						|
        PackageObject2.SetPackagePath(self.PackagePath)
 | 
						|
 | 
						|
    def ToXml(self, PackageObject2, Key):
 | 
						|
        if self.PackagePath:
 | 
						|
            pass
 | 
						|
        Element1 = CreateXmlElement('Name', PackageObject2.GetName(), [], \
 | 
						|
                         [['BaseName', PackageObject2.GetBaseName()]])
 | 
						|
        Element2 = CreateXmlElement('GUID', PackageObject2.GetGuid(), [], \
 | 
						|
                                    [['Version', PackageObject2.GetVersion()]])
 | 
						|
        NodeList = [Element1,
 | 
						|
                    Element2
 | 
						|
                    ]
 | 
						|
 | 
						|
        UNIPackageAbrstractList = []
 | 
						|
        UNIPackageDescriptionList = []
 | 
						|
        # Get Abstract and Description from Uni File
 | 
						|
        # if the Uni File exists
 | 
						|
        if PackageObject2.UniFileClassObject is not None:
 | 
						|
            UniStrDict = PackageObject2.UniFileClassObject.OrderedStringList
 | 
						|
            for Lang in UniStrDict:
 | 
						|
                for StringDefClassObject in UniStrDict[Lang]:
 | 
						|
                    if not StringDefClassObject.StringValue:
 | 
						|
                        continue
 | 
						|
                    if StringDefClassObject.StringName == DataType.TAB_DEC_PACKAGE_ABSTRACT:
 | 
						|
                        UNIPackageAbrstractList.append((GetLanguageCode1766(Lang),
 | 
						|
                                                        ConvertSpecialUnicodes(StringDefClassObject.StringValue)))
 | 
						|
 | 
						|
                    if StringDefClassObject.StringName == DataType.TAB_DEC_PACKAGE_DESCRIPTION:
 | 
						|
                        UNIPackageDescriptionList.append((GetLanguageCode1766(Lang),
 | 
						|
                                                          ConvertSpecialUnicodes(StringDefClassObject.StringValue)))
 | 
						|
 | 
						|
        # Get Abstract and Description from DEC File Header
 | 
						|
        for (Lang, Value) in PackageObject2.GetCopyright():
 | 
						|
            if Value:
 | 
						|
                NodeList.append(CreateXmlElement(DataType.TAB_HEADER_COPYRIGHT, Value, [], []))
 | 
						|
        for (Lang, Value) in PackageObject2.GetLicense():
 | 
						|
            if Value:
 | 
						|
                NodeList.append(CreateXmlElement(DataType.TAB_HEADER_LICENSE, Value, [], []))
 | 
						|
        for (Lang, Value) in PackageObject2.GetAbstract() + UNIPackageAbrstractList:
 | 
						|
            if Value:
 | 
						|
                NodeList.append(CreateXmlElement(DataType.TAB_HEADER_ABSTRACT, Value, [], [['Lang', Lang]]))
 | 
						|
        for (Lang, Value) in PackageObject2.GetDescription() + UNIPackageDescriptionList:
 | 
						|
            if Value:
 | 
						|
                NodeList.append(CreateXmlElement(DataType.TAB_HEADER_DESCRIPTION, Value, [], [['Lang', Lang]]))
 | 
						|
 | 
						|
 | 
						|
        NodeList.append(['PackagePath', PackageObject2.GetPackagePath()])
 | 
						|
        AttributeList = []
 | 
						|
        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | 
						|
        return Root
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        return "PackagePath = %s %s" \
 | 
						|
               % (self.PackagePath, self.Header)
 | 
						|
 | 
						|
##
 | 
						|
# MiscellaneousFileXml
 | 
						|
#
 | 
						|
class MiscellaneousFileXml(object):
 | 
						|
    def __init__(self):
 | 
						|
        self.Header = HeaderXml()
 | 
						|
        self.Files = []
 | 
						|
    ##
 | 
						|
    # This API is used for Package or Module's MiscellaneousFile section
 | 
						|
    #
 | 
						|
    def FromXml(self, Item, Key):
 | 
						|
        if not Item:
 | 
						|
            return None
 | 
						|
        self.Header.FromXml(Item, Key)
 | 
						|
        NewItem = XmlNode(Item, '%s/Header' % Key)
 | 
						|
        self.Header.FromXml(NewItem, 'Header')
 | 
						|
        for SubItem in XmlList(Item, '%s/Filename' % Key):
 | 
						|
            Filename = XmlElement(SubItem, '%s/Filename' % Key)
 | 
						|
            Executable = XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'Executable')
 | 
						|
            if Executable.upper() == "TRUE":
 | 
						|
                Executable = True
 | 
						|
            elif Executable.upper() == "FALSE":
 | 
						|
                Executable = False
 | 
						|
            else:
 | 
						|
                Executable = ''
 | 
						|
            self.Files.append([Filename, Executable])
 | 
						|
        MiscFile = MiscFileObject()
 | 
						|
        MiscFile.SetCopyright(self.Header.CopyrightList)
 | 
						|
        MiscFile.SetLicense(self.Header.LicenseList)
 | 
						|
        MiscFile.SetAbstract(self.Header.AbstractList)
 | 
						|
        MiscFile.SetDescription(self.Header.DescriptionList)
 | 
						|
        MiscFileList = []
 | 
						|
        for File in self.Files:
 | 
						|
            FileObj = FileObject()
 | 
						|
            FileObj.SetURI(File[0])
 | 
						|
            FileObj.SetExecutable(File[1])
 | 
						|
            MiscFileList.append(FileObj)
 | 
						|
        MiscFile.SetFileList(MiscFileList)
 | 
						|
        return MiscFile
 | 
						|
    ##
 | 
						|
    # This API is used for DistP's tool section
 | 
						|
    #
 | 
						|
    def FromXml2(self, Item, Key):
 | 
						|
        if Item is None:
 | 
						|
            return None
 | 
						|
        NewItem = XmlNode(Item, '%s/Header' % Key)
 | 
						|
        self.Header.FromXml(NewItem, 'Header')
 | 
						|
        for SubItem in XmlList(Item, '%s/Filename' % Key):
 | 
						|
            Filename = XmlElement(SubItem, '%s/Filename' % Key)
 | 
						|
            Executable = \
 | 
						|
            XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'Executable')
 | 
						|
            OsType = XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'OS')
 | 
						|
            if Executable.upper() == "TRUE":
 | 
						|
                Executable = True
 | 
						|
            elif Executable.upper() == "FALSE":
 | 
						|
                Executable = False
 | 
						|
            else:
 | 
						|
                Executable = ''
 | 
						|
            self.Files.append([Filename, Executable, OsType])
 | 
						|
        MiscFile = MiscFileObject()
 | 
						|
        MiscFile.SetName(self.Header.Name)
 | 
						|
        MiscFile.SetCopyright(self.Header.CopyrightList)
 | 
						|
        MiscFile.SetLicense(self.Header.LicenseList)
 | 
						|
        MiscFile.SetAbstract(self.Header.AbstractList)
 | 
						|
        MiscFile.SetDescription(self.Header.DescriptionList)
 | 
						|
        MiscFileList = []
 | 
						|
        for File in self.Files:
 | 
						|
            FileObj = FileObject()
 | 
						|
            FileObj.SetURI(File[0])
 | 
						|
            FileObj.SetExecutable(File[1])
 | 
						|
            FileObj.SetOS(File[2])
 | 
						|
            MiscFileList.append(FileObj)
 | 
						|
        MiscFile.SetFileList(MiscFileList)
 | 
						|
        return MiscFile
 | 
						|
 | 
						|
    ##
 | 
						|
    # This API is used for Package or Module's MiscellaneousFile section
 | 
						|
    #
 | 
						|
    def ToXml(self, MiscFile, Key):
 | 
						|
        if self.Header:
 | 
						|
            pass
 | 
						|
        if MiscFile:
 | 
						|
            if MiscFile.GetAbstract():
 | 
						|
                DPAbstract = MiscFile.GetAbstract()[0][1]
 | 
						|
            else:
 | 
						|
                DPAbstract = ''
 | 
						|
            if MiscFile.GetDescription():
 | 
						|
                DPDescription = MiscFile.GetDescription()[0][1]
 | 
						|
            else:
 | 
						|
                DPDescription = ''
 | 
						|
            if MiscFile.GetCopyright():
 | 
						|
                DPCopyright = MiscFile.GetCopyright()[0][1]
 | 
						|
            else:
 | 
						|
                DPCopyright = ''
 | 
						|
            if MiscFile.GetLicense():
 | 
						|
                DPLicense = MiscFile.GetLicense()[0][1]
 | 
						|
            else:
 | 
						|
                DPLicense = ''
 | 
						|
            NodeList = [['Copyright', DPCopyright],
 | 
						|
                        ['License', DPLicense],
 | 
						|
                        ['Abstract', DPAbstract],
 | 
						|
                        ['Description', DPDescription],
 | 
						|
                       ]
 | 
						|
            for File in MiscFile.GetFileList():
 | 
						|
                NodeList.append\
 | 
						|
                (CreateXmlElement\
 | 
						|
                 ('Filename', File.GetURI(), [], \
 | 
						|
                  [['Executable', str(File.GetExecutable()).lower()]]))
 | 
						|
            Root = CreateXmlElement('%s' % Key, '', NodeList, [])
 | 
						|
            return Root
 | 
						|
    ##
 | 
						|
    # This API is used for DistP's tool section
 | 
						|
    #
 | 
						|
    def ToXml2(self, MiscFile, Key):
 | 
						|
        if self.Header:
 | 
						|
            pass
 | 
						|
        if MiscFile:
 | 
						|
            if MiscFile.GetAbstract():
 | 
						|
                DPAbstract = MiscFile.GetAbstract()[0][1]
 | 
						|
            else:
 | 
						|
                DPAbstract = ''
 | 
						|
            if MiscFile.GetDescription():
 | 
						|
                DPDescription = MiscFile.GetDescription()[0][1]
 | 
						|
            else:
 | 
						|
                DPDescription = ''
 | 
						|
            if MiscFile.GetCopyright():
 | 
						|
                DPCopyright = MiscFile.GetCopyright()[0][1]
 | 
						|
            else:
 | 
						|
                DPCopyright = ''
 | 
						|
            if MiscFile.GetLicense():
 | 
						|
                DPLicense = MiscFile.GetLicense()[0][1]
 | 
						|
            else:
 | 
						|
                DPLicense = ''
 | 
						|
            NodeList = [['Name', MiscFile.GetName()],
 | 
						|
                        ['Copyright', DPCopyright],
 | 
						|
                        ['License', DPLicense],
 | 
						|
                        ['Abstract', DPAbstract],
 | 
						|
                        ['Description', DPDescription],
 | 
						|
                       ]
 | 
						|
            HeaderNode = CreateXmlElement('Header', '', NodeList, [])
 | 
						|
            NodeList = [HeaderNode]
 | 
						|
            for File in MiscFile.GetFileList():
 | 
						|
                NodeList.append\
 | 
						|
                (CreateXmlElement\
 | 
						|
                 ('Filename', File.GetURI(), [], \
 | 
						|
                  [['Executable', str(File.GetExecutable()).lower()], \
 | 
						|
                   ['OS', File.GetOS()]]))
 | 
						|
            Root = CreateXmlElement('%s' % Key, '', NodeList, [])
 | 
						|
            return Root
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        Str = str(self.Header)
 | 
						|
        for Item in self.Files:
 | 
						|
            Str = Str + '\n\tFilename:' + str(Item)
 | 
						|
        return Str
 | 
						|
##
 | 
						|
# UserExtensionsXml
 | 
						|
#
 | 
						|
class UserExtensionsXml(object):
 | 
						|
    def __init__(self):
 | 
						|
        self.UserId = ''
 | 
						|
        self.Identifier = ''
 | 
						|
        self.BinaryAbstractList = []
 | 
						|
        self.BinaryDescriptionList = []
 | 
						|
        self.BinaryCopyrightList = []
 | 
						|
        self.BinaryLicenseList = []
 | 
						|
        self.LangDefsList = []
 | 
						|
        self.DefineDict = {}
 | 
						|
        self.BuildOptionDict = {}
 | 
						|
        self.IncludesDict = {}
 | 
						|
        self.SourcesDict = {}
 | 
						|
        self.BinariesDict = {}
 | 
						|
        self.SupArchList = []
 | 
						|
        self.Statement = ''
 | 
						|
        self.Defines = ''
 | 
						|
        self.BuildOptions = ''
 | 
						|
 | 
						|
    def FromXml2(self, Item, Key):
 | 
						|
        self.UserId = XmlAttribute(XmlNode(Item, '%s' % Key), 'UserId')
 | 
						|
        self.Identifier = XmlAttribute(XmlNode(Item, '%s' % Key), 'Identifier')
 | 
						|
        UserExtension = UserExtensionObject()
 | 
						|
        UserExtension.SetUserID(self.UserId)
 | 
						|
        UserExtension.SetIdentifier(self.Identifier)
 | 
						|
        return UserExtension
 | 
						|
 | 
						|
    def FromXml(self, Item, Key):
 | 
						|
        self.UserId = XmlAttribute(XmlNode(Item, '%s' % Key), 'UserId')
 | 
						|
        self.Identifier = XmlAttribute(XmlNode(Item, '%s' % Key), 'Identifier')
 | 
						|
        if self.UserId == DataType.TAB_BINARY_HEADER_USERID \
 | 
						|
        and self.Identifier == DataType.TAB_BINARY_HEADER_IDENTIFIER:
 | 
						|
            for SubItem in XmlList(Item, '%s/BinaryAbstract' % Key):
 | 
						|
                BinaryAbstractLang = XmlAttribute(SubItem, 'Lang')
 | 
						|
                self.BinaryAbstractList.append((BinaryAbstractLang, XmlElement(SubItem, '%s/BinaryAbstract' % Key)))
 | 
						|
            for SubItem in XmlList(Item, '%s/BinaryDescription' % Key):
 | 
						|
                BinaryDescriptionLang = XmlAttribute(SubItem, 'Lang')
 | 
						|
                self.BinaryDescriptionList.append((BinaryDescriptionLang,
 | 
						|
                                                       XmlElement(SubItem, '%s/BinaryDescription' % Key)))
 | 
						|
            for SubItem in XmlList(Item, '%s/BinaryCopyright' % Key):
 | 
						|
                BinaryCopyrightLang = XmlAttribute(SubItem, 'Lang')
 | 
						|
                self.BinaryCopyrightList.append((BinaryCopyrightLang,
 | 
						|
                                                     XmlElement(SubItem, '%s/BinaryCopyright' % Key)))
 | 
						|
            for SubItem in XmlList(Item, '%s/BinaryLicense' % Key):
 | 
						|
                BinaryLicenseLang = XmlAttribute(SubItem, 'Lang')
 | 
						|
                self.BinaryLicenseList.append((BinaryLicenseLang,
 | 
						|
                                                   XmlElement(SubItem, '%s/BinaryLicense' % Key)))
 | 
						|
 | 
						|
        DefineItem = XmlNode(Item, '%s/Define' % Key)
 | 
						|
        for SubItem in XmlList(DefineItem, 'Define/Statement'):
 | 
						|
            Statement = XmlElement(SubItem, '%s/Statement' % Key)
 | 
						|
            self.DefineDict[Statement] = ""
 | 
						|
        BuildOptionItem = XmlNode(Item, '%s/BuildOption' % Key)
 | 
						|
        for SubItem in XmlList(BuildOptionItem, 'BuildOption/Statement'):
 | 
						|
            Statement = XmlElement(SubItem, '%s/Statement' % Key)
 | 
						|
            Arch = XmlAttribute(XmlNode(SubItem, '%s/Statement' % Key), 'SupArchList')
 | 
						|
            self.BuildOptionDict[Arch] = Statement
 | 
						|
        IncludesItem = XmlNode(Item, '%s/Includes' % Key)
 | 
						|
        for SubItem in XmlList(IncludesItem, 'Includes/Statement'):
 | 
						|
            Statement = XmlElement(SubItem, '%s/Statement' % Key)
 | 
						|
            Arch = XmlAttribute(XmlNode(SubItem, '%s/Statement' % Key), 'SupArchList')
 | 
						|
            self.IncludesDict[Statement] = Arch
 | 
						|
        SourcesItem = XmlNode(Item, '%s/Sources' % Key)
 | 
						|
        Tmp = UserExtensionSourceXml()
 | 
						|
        SourceDict = Tmp.FromXml(SourcesItem, 'Sources')
 | 
						|
        self.SourcesDict = SourceDict
 | 
						|
        BinariesItem = XmlNode(Item, '%s/Binaries' % Key)
 | 
						|
        Tmp = UserExtensionBinaryXml()
 | 
						|
        BinariesDict = Tmp.FromXml(BinariesItem, 'Binaries')
 | 
						|
        self.BinariesDict = BinariesDict
 | 
						|
        self.Statement = XmlElement(Item, 'UserExtensions')
 | 
						|
        SupArch = XmlAttribute(XmlNode(Item, '%s' % Key), 'SupArchList')
 | 
						|
        self.SupArchList = [Arch for Arch in GetSplitValueList(SupArch, DataType.TAB_SPACE_SPLIT) if Arch]
 | 
						|
        UserExtension = UserExtensionObject()
 | 
						|
        UserExtension.SetUserID(self.UserId)
 | 
						|
        UserExtension.SetIdentifier(self.Identifier)
 | 
						|
        UserExtension.SetBinaryAbstract(self.BinaryAbstractList)
 | 
						|
        UserExtension.SetBinaryDescription(self.BinaryDescriptionList)
 | 
						|
        UserExtension.SetBinaryCopyright(self.BinaryCopyrightList)
 | 
						|
        UserExtension.SetBinaryLicense(self.BinaryLicenseList)
 | 
						|
        UserExtension.SetStatement(self.Statement)
 | 
						|
        UserExtension.SetSupArchList(self.SupArchList)
 | 
						|
        UserExtension.SetDefinesDict(self.DefineDict)
 | 
						|
        UserExtension.SetBuildOptionDict(self.BuildOptionDict)
 | 
						|
        UserExtension.SetIncludesDict(self.IncludesDict)
 | 
						|
        UserExtension.SetSourcesDict(self.SourcesDict)
 | 
						|
        UserExtension.SetBinariesDict(self.BinariesDict)
 | 
						|
        return UserExtension
 | 
						|
 | 
						|
    def ToXml(self, UserExtension, Key):
 | 
						|
        if self.UserId:
 | 
						|
            pass
 | 
						|
        AttributeList = [['UserId', str(UserExtension.GetUserID())],
 | 
						|
                         ['Identifier', str(UserExtension.GetIdentifier())],
 | 
						|
                         ['SupArchList', \
 | 
						|
                          GetStringOfList(UserExtension.GetSupArchList())],
 | 
						|
                        ]
 | 
						|
        Root = CreateXmlElement('%s' % Key, UserExtension.GetStatement(), [], \
 | 
						|
                                    AttributeList)
 | 
						|
        if UserExtension.GetIdentifier() == DataType.TAB_BINARY_HEADER_IDENTIFIER and \
 | 
						|
        UserExtension.GetUserID() == DataType.TAB_BINARY_HEADER_USERID:
 | 
						|
            for (Lang, Value) in UserExtension.GetBinaryAbstract():
 | 
						|
                if Value:
 | 
						|
                    ChildElement = CreateXmlElement('BinaryAbstract', Value, [], [['Lang', Lang]])
 | 
						|
                    Root.appendChild(ChildElement)
 | 
						|
            for (Lang, Value) in UserExtension.GetBinaryDescription():
 | 
						|
                if Value:
 | 
						|
                    ChildElement = CreateXmlElement('BinaryDescription', Value, [], [['Lang', Lang]])
 | 
						|
                    Root.appendChild(ChildElement)
 | 
						|
            for (Lang, Value) in UserExtension.GetBinaryCopyright():
 | 
						|
                if Value:
 | 
						|
                    ChildElement = CreateXmlElement('BinaryCopyright', Value, [], [])
 | 
						|
                    Root.appendChild(ChildElement)
 | 
						|
            for (Lang, Value) in UserExtension.GetBinaryLicense():
 | 
						|
                if Value:
 | 
						|
                    ChildElement = CreateXmlElement('BinaryLicense', Value, [], [])
 | 
						|
                    Root.appendChild(ChildElement)
 | 
						|
 | 
						|
        NodeList = []
 | 
						|
        DefineDict = UserExtension.GetDefinesDict()
 | 
						|
        if DefineDict:
 | 
						|
            for Item in DefineDict.keys():
 | 
						|
                NodeList.append(CreateXmlElement\
 | 
						|
                                ('Statement', Item, [], []))
 | 
						|
            DefineElement = CreateXmlElement('Define', '', NodeList, [])
 | 
						|
            Root.appendChild(DefineElement)
 | 
						|
        NodeList = []
 | 
						|
        BuildOptionDict = UserExtension.GetBuildOptionDict()
 | 
						|
        if BuildOptionDict:
 | 
						|
            for Item in BuildOptionDict.keys():
 | 
						|
                NodeList.append(CreateXmlElement\
 | 
						|
                                ('Statement', BuildOptionDict[Item], [], \
 | 
						|
                                 [['SupArchList', Item]]))
 | 
						|
            BuildOptionElement = \
 | 
						|
            CreateXmlElement('BuildOption', '', NodeList, [])
 | 
						|
            Root.appendChild(BuildOptionElement)
 | 
						|
        NodeList = []
 | 
						|
        IncludesDict = UserExtension.GetIncludesDict()
 | 
						|
        if IncludesDict:
 | 
						|
            for Item in IncludesDict.keys():
 | 
						|
                NodeList.append(CreateXmlElement\
 | 
						|
                                ('Statement', Item, [], \
 | 
						|
                                 [['SupArchList', IncludesDict[Item]]]))
 | 
						|
            IncludesElement = CreateXmlElement('Includes', '', NodeList, [])
 | 
						|
            Root.appendChild(IncludesElement)
 | 
						|
        NodeList = []
 | 
						|
        SourcesDict = UserExtension.GetSourcesDict()
 | 
						|
        if SourcesDict:
 | 
						|
            Tmp = UserExtensionSourceXml()
 | 
						|
            Root.appendChild(Tmp.ToXml(SourcesDict, 'Sources'))
 | 
						|
        NodeList = []
 | 
						|
        BinariesDict = UserExtension.GetBinariesDict()
 | 
						|
        if BinariesDict:
 | 
						|
            Tmp = UserExtensionBinaryXml()
 | 
						|
            Root.appendChild(Tmp.ToXml(BinariesDict, 'Binaries'))
 | 
						|
        return Root
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        Str = "UserId = %s Identifier = %s" % (self.UserId, self.Identifier)
 | 
						|
        Str = Str + '\n\tDefines:' + str(self.Defines)
 | 
						|
        Str = Str + '\n\tBuildOptions:' + str(self.BuildOptions)
 | 
						|
        return Str
 | 
						|
 | 
						|
##
 | 
						|
# UserExtensionSourceXml
 | 
						|
#
 | 
						|
class UserExtensionSourceXml(object):
 | 
						|
    def __init__(self):
 | 
						|
        self.UserExtensionSource = ''
 | 
						|
 | 
						|
    def FromXml(self, Item, Key):
 | 
						|
        if Key:
 | 
						|
            pass
 | 
						|
        if self.UserExtensionSource:
 | 
						|
            pass
 | 
						|
        Dict = {}
 | 
						|
        #SourcesItem = XmlNode(Item, '%s/Sources' % Key)
 | 
						|
        for SubItem in XmlList(Item, 'Sources/SourceFile'):
 | 
						|
            FileName = XmlElement(SubItem, 'SourceFile/FileName')
 | 
						|
            Family = XmlElement(SubItem, 'SourceFile/Family')
 | 
						|
            FeatureFlag = XmlElement(SubItem, 'SourceFile/FeatureFlag')
 | 
						|
            SupArchStr = XmlElement(SubItem, 'SourceFile/SupArchList')
 | 
						|
            DictKey = (FileName, Family, FeatureFlag, SupArchStr)
 | 
						|
            ValueList = []
 | 
						|
            for ValueNodeItem in XmlList(SubItem, \
 | 
						|
                                         'SourceFile/SourceFileOtherAttr'):
 | 
						|
                TagName = XmlElement(ValueNodeItem, \
 | 
						|
                                     'SourceFileOtherAttr/TagName')
 | 
						|
                ToolCode = XmlElement(ValueNodeItem, \
 | 
						|
                                      'SourceFileOtherAttr/ToolCode')
 | 
						|
                Comment = XmlElement(ValueNodeItem, \
 | 
						|
                                     'SourceFileOtherAttr/Comment')
 | 
						|
                if (TagName == ' ') and (ToolCode == ' ') and (Comment == ' '):
 | 
						|
                    TagName = ''
 | 
						|
                    ToolCode = ''
 | 
						|
                    Comment = ''
 | 
						|
                ValueList.append((TagName, ToolCode, Comment))
 | 
						|
            Dict[DictKey] = ValueList
 | 
						|
        return Dict
 | 
						|
 | 
						|
    def ToXml(self, Dict, Key):
 | 
						|
        if self.UserExtensionSource:
 | 
						|
            pass
 | 
						|
        SourcesNodeList = []
 | 
						|
        for Item in Dict:
 | 
						|
            ValueList = Dict[Item]
 | 
						|
            (FileName, Family, FeatureFlag, SupArchStr) = Item
 | 
						|
            SourceFileNodeList = []
 | 
						|
            SourceFileNodeList.append(["FileName", FileName])
 | 
						|
            SourceFileNodeList.append(["Family", Family])
 | 
						|
            SourceFileNodeList.append(["FeatureFlag", FeatureFlag])
 | 
						|
            SourceFileNodeList.append(["SupArchList", SupArchStr])
 | 
						|
            for (TagName, ToolCode, Comment) in ValueList:
 | 
						|
                ValueNodeList = []
 | 
						|
                if not (TagName or ToolCode or Comment):
 | 
						|
                    TagName = ' '
 | 
						|
                    ToolCode = ' '
 | 
						|
                    Comment = ' '
 | 
						|
                ValueNodeList.append(["TagName", TagName])
 | 
						|
                ValueNodeList.append(["ToolCode", ToolCode])
 | 
						|
                ValueNodeList.append(["Comment", Comment])
 | 
						|
                ValueNodeXml = CreateXmlElement('SourceFileOtherAttr', '', \
 | 
						|
                                                ValueNodeList, [])
 | 
						|
                SourceFileNodeList.append(ValueNodeXml)
 | 
						|
            SourceFileNodeXml = CreateXmlElement('SourceFile', '', \
 | 
						|
                                                 SourceFileNodeList, [])
 | 
						|
            SourcesNodeList.append(SourceFileNodeXml)
 | 
						|
        Root = CreateXmlElement('%s' % Key, '', SourcesNodeList, [])
 | 
						|
        return Root
 | 
						|
 | 
						|
##
 | 
						|
# UserExtensionBinaryXml
 | 
						|
#
 | 
						|
class UserExtensionBinaryXml(object):
 | 
						|
    def __init__(self):
 | 
						|
        self.UserExtensionBinary = ''
 | 
						|
 | 
						|
    def FromXml(self, Item, Key):
 | 
						|
        if Key:
 | 
						|
            pass
 | 
						|
        if self.UserExtensionBinary:
 | 
						|
            pass
 | 
						|
        Dict = {}
 | 
						|
        for SubItem in XmlList(Item, 'Binaries/Binary'):
 | 
						|
            FileName = XmlElement(SubItem, 'Binary/FileName')
 | 
						|
            FileType = XmlElement(SubItem, 'Binary/FileType')
 | 
						|
            FFE = XmlElement(SubItem, 'Binary/FeatureFlag')
 | 
						|
            SupArch = XmlElement(SubItem, 'Binary/SupArchList')
 | 
						|
            DictKey = (FileName, FileType, ConvertNOTEQToNE(FFE), SupArch)
 | 
						|
            ValueList = []
 | 
						|
            for ValueNodeItem in XmlList(SubItem, \
 | 
						|
                                         'Binary/BinaryFileOtherAttr'):
 | 
						|
                Target = XmlElement(ValueNodeItem, \
 | 
						|
                                    'BinaryFileOtherAttr/Target')
 | 
						|
                Family = XmlElement(ValueNodeItem, \
 | 
						|
                                    'BinaryFileOtherAttr/Family')
 | 
						|
                TagName = XmlElement(ValueNodeItem, \
 | 
						|
                                     'BinaryFileOtherAttr/TagName')
 | 
						|
                Comment = XmlElement(ValueNodeItem, \
 | 
						|
                                     'BinaryFileOtherAttr/Comment')
 | 
						|
                if (Target == ' ') and (Family == ' ') and \
 | 
						|
                   (TagName == ' ') and (Comment == ' '):
 | 
						|
                    Target = ''
 | 
						|
                    Family = ''
 | 
						|
                    TagName = ''
 | 
						|
                    Comment = ''
 | 
						|
 | 
						|
                ValueList.append((Target, Family, TagName, Comment))
 | 
						|
            Dict[DictKey] = ValueList
 | 
						|
        return Dict
 | 
						|
 | 
						|
    def ToXml(self, Dict, Key):
 | 
						|
        if self.UserExtensionBinary:
 | 
						|
            pass
 | 
						|
        BinariesNodeList = []
 | 
						|
        for Item in Dict:
 | 
						|
            ValueList = Dict[Item]
 | 
						|
            (FileName, FileType, FeatureFlag, SupArch) = Item
 | 
						|
            FileNodeList = []
 | 
						|
            FileNodeList.append(["FileName", FileName])
 | 
						|
            FileNodeList.append(["FileType", FileType])
 | 
						|
            FileNodeList.append(["FeatureFlag", ConvertNEToNOTEQ(FeatureFlag)])
 | 
						|
            FileNodeList.append(["SupArchList", SupArch])
 | 
						|
            for (Target, Family, TagName, Comment) in ValueList:
 | 
						|
                ValueNodeList = []
 | 
						|
                if not (Target or Family or TagName or Comment):
 | 
						|
                    Target = ' '
 | 
						|
                    Family = ' '
 | 
						|
                    TagName = ' '
 | 
						|
                    Comment = ' '
 | 
						|
                ValueNodeList.append(["Target", Target])
 | 
						|
                ValueNodeList.append(["Family", Family])
 | 
						|
                ValueNodeList.append(["TagName", TagName])
 | 
						|
                ValueNodeList.append(["Comment", Comment])
 | 
						|
                ValueNodeXml = CreateXmlElement('BinaryFileOtherAttr', '', \
 | 
						|
                                                ValueNodeList, [])
 | 
						|
                FileNodeList.append(ValueNodeXml)
 | 
						|
            FileNodeXml = CreateXmlElement('Binary', '', FileNodeList, [])
 | 
						|
            BinariesNodeList.append(FileNodeXml)
 | 
						|
        Root = CreateXmlElement('%s' % Key, '', BinariesNodeList, [])
 | 
						|
        return Root
 | 
						|
 | 
						|
##
 | 
						|
# LibraryClassXml
 | 
						|
#
 | 
						|
class LibraryClassXml(object):
 | 
						|
    def __init__(self):
 | 
						|
        self.Keyword = ''
 | 
						|
        self.HeaderFile = ''
 | 
						|
        self.RecommendedInstanceGuid = ''
 | 
						|
        self.RecommendedInstanceVersion = ''
 | 
						|
        self.CommonDefines = CommonDefinesXml()
 | 
						|
        self.HelpText = []
 | 
						|
 | 
						|
    def FromXml(self, Item, Key):
 | 
						|
        self.Keyword = XmlAttribute(XmlNode(Item, '%s' % Key), 'Keyword')
 | 
						|
        if self.Keyword == '':
 | 
						|
            self.Keyword = XmlElement(Item, '%s/Keyword' % Key)
 | 
						|
        self.HeaderFile = XmlElement(Item, '%s/HeaderFile' % 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)
 | 
						|
        LibraryClass = LibraryClassObject()
 | 
						|
        LibraryClass.SetLibraryClass(self.Keyword)
 | 
						|
        LibraryClass.SetIncludeHeader(self.HeaderFile)
 | 
						|
        if self.CommonDefines.Usage:
 | 
						|
            LibraryClass.SetUsage(self.CommonDefines.Usage)
 | 
						|
        LibraryClass.SetSupArchList(self.CommonDefines.SupArchList)
 | 
						|
        LibraryClass.SetSupModuleList(self.CommonDefines.SupModList)
 | 
						|
        LibraryClass.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
 | 
						|
        LibraryClass.SetHelpTextList(GetHelpTextList(self.HelpText))
 | 
						|
        return LibraryClass
 | 
						|
 | 
						|
    def ToXml(self, LibraryClass, Key):
 | 
						|
        if self.HeaderFile:
 | 
						|
            pass
 | 
						|
        AttributeList = \
 | 
						|
        [['Keyword', LibraryClass.GetLibraryClass()],
 | 
						|
         ['SupArchList', GetStringOfList(LibraryClass.GetSupArchList())],
 | 
						|
         ['SupModList', GetStringOfList(LibraryClass.GetSupModuleList())]
 | 
						|
         ]
 | 
						|
        NodeList = [['HeaderFile', LibraryClass.GetIncludeHeader()]]
 | 
						|
        for Item in LibraryClass.GetHelpTextList():
 | 
						|
            Tmp = HelpTextXml()
 | 
						|
            NodeList.append(Tmp.ToXml(Item))
 | 
						|
        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | 
						|
        return Root
 | 
						|
 | 
						|
    def ToXml2(self, LibraryClass, Key):
 | 
						|
        if self.HeaderFile:
 | 
						|
            pass
 | 
						|
        FeatureFlag = ConvertNEToNOTEQ(LibraryClass.GetFeatureFlag())
 | 
						|
        AttributeList = \
 | 
						|
        [['Usage', LibraryClass.GetUsage()], \
 | 
						|
         ['SupArchList', GetStringOfList(LibraryClass.GetSupArchList())], \
 | 
						|
         ['SupModList', GetStringOfList(LibraryClass.GetSupModuleList())], \
 | 
						|
         ['FeatureFlag', FeatureFlag]
 | 
						|
         ]
 | 
						|
        NodeList = [['Keyword', LibraryClass.GetLibraryClass()], ]
 | 
						|
        for Item in LibraryClass.GetHelpTextList():
 | 
						|
            Tmp = HelpTextXml()
 | 
						|
            NodeList.append(Tmp.ToXml(Item))
 | 
						|
        Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | 
						|
        return Root
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        Str = "Keyword = %s HeaderFile = %s RecommendedInstanceGuid = %s RecommendedInstanceVersion = %s %s" % \
 | 
						|
              (self.Keyword, self.HeaderFile, self.RecommendedInstanceGuid, self.RecommendedInstanceVersion, \
 | 
						|
              self.CommonDefines)
 | 
						|
        for Item in self.HelpText:
 | 
						|
            Str = Str + "\n\t" + str(Item)
 | 
						|
        return Str
 | 
						|
 | 
						|
##
 | 
						|
# FilenameXml
 | 
						|
#
 | 
						|
class FilenameXml(object):
 | 
						|
    def __init__(self):
 | 
						|
        self.FileType = ''
 | 
						|
        self.Filename = ''
 | 
						|
        self.CommonDefines = CommonDefinesXml()
 | 
						|
 | 
						|
    def FromXml(self, Item, Key):
 | 
						|
        self.FileType = XmlAttribute(Item, 'FileType')
 | 
						|
        Guid = XmlAttribute(Item, 'GUID')
 | 
						|
        self.Filename = XmlElement(Item, 'Filename')
 | 
						|
        self.CommonDefines.FromXml(Item, Key)
 | 
						|
        FeatureFlag = ConvertNOTEQToNE(self.CommonDefines.FeatureFlag)
 | 
						|
        Filename = FileNameObject()
 | 
						|
        #
 | 
						|
        # Convert File Type
 | 
						|
        #
 | 
						|
        if self.FileType == 'UEFI_IMAGE':
 | 
						|
            self.FileType = 'PE32'
 | 
						|
 | 
						|
        Filename.SetGuidValue(Guid)
 | 
						|
        Filename.SetFileType(self.FileType)
 | 
						|
        Filename.SetFilename(self.Filename)
 | 
						|
        Filename.SetSupArchList(self.CommonDefines.SupArchList)
 | 
						|
        Filename.SetFeatureFlag(FeatureFlag)
 | 
						|
 | 
						|
        return Filename
 | 
						|
 | 
						|
    def ToXml(self, Filename, Key):
 | 
						|
        if self.Filename:
 | 
						|
            pass
 | 
						|
        AttributeList = [['SupArchList', \
 | 
						|
                          GetStringOfList(Filename.GetSupArchList())],
 | 
						|
                         ['FileType', Filename.GetFileType()],
 | 
						|
                         ['FeatureFlag', ConvertNEToNOTEQ(Filename.GetFeatureFlag())],
 | 
						|
                         ['GUID', Filename.GetGuidValue()]
 | 
						|
                        ]
 | 
						|
        Root = CreateXmlElement('%s' % Key, Filename.GetFilename(), [], AttributeList)
 | 
						|
 | 
						|
        return Root
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        return "FileType = %s Filename = %s %s" \
 | 
						|
             % (self.FileType, self.Filename, self.CommonDefines)
 |