1 ## @file 2 # This file is used to parse a xml file of .PKG file 3 # 4 # Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR> 5 # 6 # This program and the accompanying materials are licensed and made available 7 # under the terms and conditions of the BSD License which accompanies this 8 # distribution. The full text of the license may be found at 9 # http://opensource.org/licenses/bsd-license.php 10 # 11 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 # 14 15 ''' 16 XmlParserMisc 17 ''' 18 from Object.POM.CommonObject import TextObject 19 from Logger.StringTable import ERR_XML_PARSER_REQUIRED_ITEM_MISSING 20 from Logger.ToolError import PARSER_ERROR 21 import Logger.Log as Logger 22 23 ## ConvertVariableName() 24 # Convert VariableName to be L"string", 25 # input of UCS-2 format Hex Array or L"string" (C style.) could be converted successfully, 26 # others will not. 27 # 28 # @param VariableName: string need to be converted 29 # @retval: the L quoted string converted if success, else None will be returned 30 # 31 def ConvertVariableName(VariableName): 32 VariableName = VariableName.strip() 33 # 34 # check for L quoted string 35 # 36 if VariableName.startswith('L"') and VariableName.endswith('"'): 37 return VariableName 38 39 # 40 # check for Hex Array, it should be little endian even number of hex numbers 41 # 42 ValueList = VariableName.split(' ') 43 if len(ValueList)%2 == 1: 44 return None 45 46 TransferedStr = '' 47 48 Index = 0 49 50 while Index < len(ValueList): 51 FirstByte = int(ValueList[Index], 16) 52 SecondByte = int(ValueList[Index + 1], 16) 53 if SecondByte != 0: 54 return None 55 56 if FirstByte not in xrange(0x20, 0x7F): 57 return None 58 TransferedStr += ('%c')%FirstByte 59 Index = Index + 2 60 61 return 'L"' + TransferedStr + '"' 62 63 ## IsRequiredItemListNull 64 # 65 # Check if a required XML section item/attribue is NULL 66 # 67 # @param ItemList: The list of items to be checked 68 # @param XmlTreeLevel: The error message tree level 69 # 70 def IsRequiredItemListNull(ItemDict, XmlTreeLevel): 71 for Key in ItemDict: 72 if not ItemDict[Key]: 73 Msg = "->".join(Node for Node in XmlTreeLevel) 74 ErrorMsg = ERR_XML_PARSER_REQUIRED_ITEM_MISSING % (Key, Msg) 75 Logger.Error('\nUPT', PARSER_ERROR, ErrorMsg, RaiseError=True) 76 77 ## Get help text 78 # 79 # @param HelpText 80 # 81 def GetHelpTextList(HelpText): 82 HelpTextList = [] 83 for HelT in HelpText: 84 HelpTextObj = TextObject() 85 HelpTextObj.SetLang(HelT.Lang) 86 HelpTextObj.SetString(HelT.HelpText) 87 HelpTextList.append(HelpTextObj) 88 return HelpTextList 89 90 ## Get Prompt text 91 # 92 # @param Prompt 93 # 94 def GetPromptList(Prompt): 95 PromptList = [] 96 for SubPrompt in Prompt: 97 PromptObj = TextObject() 98 PromptObj.SetLang(SubPrompt.Lang) 99 PromptObj.SetString(SubPrompt.Prompt) 100 PromptList.append(PromptObj) 101 return PromptList 102