4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync## @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# This file is used to parse a xml file of .PKG file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# This program and the accompanying materials are licensed and made available
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# under the terms and conditions of the BSD License which accompanies this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync'''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXmlParserMisc
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync'''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Object.POM.CommonObject import TextObject
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Logger.StringTable import ERR_XML_PARSER_REQUIRED_ITEM_MISSING
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Logger.ToolError import PARSER_ERROR
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncimport Logger.Log as Logger
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync## ConvertVariableName()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# Convert VariableName to be L"string",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# input of UCS-2 format Hex Array or L"string" (C style.) could be converted successfully,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# others will not.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param VariableName: string need to be converted
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @retval: the L quoted string converted if success, else None will be returned
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncdef ConvertVariableName(VariableName):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VariableName = VariableName.strip()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # check for L quoted string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if VariableName.startswith('L"') and VariableName.endswith('"'):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return VariableName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # check for Hex Array, it should be little endian even number of hex numbers
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ValueList = VariableName.split(' ')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if len(ValueList)%2 == 1:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return None
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TransferedStr = ''
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Index = 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while Index < len(ValueList):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FirstByte = int(ValueList[Index], 16)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SecondByte = int(ValueList[Index + 1], 16)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if SecondByte != 0:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return None
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if FirstByte not in xrange(0x20, 0x7F):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return None
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TransferedStr += ('%c')%FirstByte
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Index = Index + 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return 'L"' + TransferedStr + '"'
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync## IsRequiredItemListNull
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# Check if a required XML section item/attribue is NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param ItemList: The list of items to be checked
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param XmlTreeLevel: The error message tree level
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncdef IsRequiredItemListNull(ItemDict, XmlTreeLevel):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for Key in ItemDict:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if not ItemDict[Key]:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Msg = "->".join(Node for Node in XmlTreeLevel)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ErrorMsg = ERR_XML_PARSER_REQUIRED_ITEM_MISSING % (Key, Msg)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Logger.Error('\nUPT', PARSER_ERROR, ErrorMsg, RaiseError=True)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync## Get help text
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# @param HelpText
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncdef GetHelpTextList(HelpText):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HelpTextList = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for HelT in HelpText:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HelpTextObj = TextObject()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HelpTextObj.SetLang(HelT.Lang)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HelpTextObj.SetString(HelT.HelpText)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HelpTextList.append(HelpTextObj)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return HelpTextList