]> git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/Python/UPT/Xml/XmlParserMisc.py
BaseTools: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Xml / XmlParserMisc.py
1 ## @file
2 # This file is used to parse a xml file of .PKG file
3 #
4 # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
5 #
6 # SPDX-License-Identifier: BSD-2-Clause-Patent
7 #
8
9 '''
10 XmlParserMisc
11 '''
12 from Object.POM.CommonObject import TextObject
13 from Logger.StringTable import ERR_XML_PARSER_REQUIRED_ITEM_MISSING
14 from Logger.ToolError import PARSER_ERROR
15 import Logger.Log as Logger
16
17 ## ConvertVariableName()
18 # Convert VariableName to be L"string",
19 # input of UCS-2 format Hex Array or L"string" (C style.) could be converted successfully,
20 # others will not.
21 #
22 # @param VariableName: string need to be converted
23 # @retval: the L quoted string converted if success, else None will be returned
24 #
25 def ConvertVariableName(VariableName):
26 VariableName = VariableName.strip()
27 #
28 # check for L quoted string
29 #
30 if VariableName.startswith('L"') and VariableName.endswith('"'):
31 return VariableName
32
33 #
34 # check for Hex Array, it should be little endian even number of hex numbers
35 #
36 ValueList = VariableName.split(' ')
37 if len(ValueList)%2 == 1:
38 return None
39
40 TransferedStr = ''
41
42 Index = 0
43
44 while Index < len(ValueList):
45 FirstByte = int(ValueList[Index], 16)
46 SecondByte = int(ValueList[Index + 1], 16)
47 if SecondByte != 0:
48 return None
49
50 if FirstByte not in range(0x20, 0x7F):
51 return None
52 TransferedStr += ('%c')%FirstByte
53 Index = Index + 2
54
55 return 'L"' + TransferedStr + '"'
56
57 ## IsRequiredItemListNull
58 #
59 # Check if a required XML section item/attribue is NULL
60 #
61 # @param ItemList: The list of items to be checked
62 # @param XmlTreeLevel: The error message tree level
63 #
64 def IsRequiredItemListNull(ItemDict, XmlTreeLevel):
65 for Key in ItemDict:
66 if not ItemDict[Key]:
67 Msg = "->".join(Node for Node in XmlTreeLevel)
68 ErrorMsg = ERR_XML_PARSER_REQUIRED_ITEM_MISSING % (Key, Msg)
69 Logger.Error('\nUPT', PARSER_ERROR, ErrorMsg, RaiseError=True)
70
71 ## Get help text
72 #
73 # @param HelpText
74 #
75 def GetHelpTextList(HelpText):
76 HelpTextList = []
77 for HelT in HelpText:
78 HelpTextObj = TextObject()
79 HelpTextObj.SetLang(HelT.Lang)
80 HelpTextObj.SetString(HelT.HelpText)
81 HelpTextList.append(HelpTextObj)
82 return HelpTextList
83
84 ## Get Prompt text
85 #
86 # @param Prompt
87 #
88 def GetPromptList(Prompt):
89 PromptList = []
90 for SubPrompt in Prompt:
91 PromptObj = TextObject()
92 PromptObj.SetLang(SubPrompt.Lang)
93 PromptObj.SetString(SubPrompt.Prompt)
94 PromptList.append(PromptObj)
95 return PromptList