]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/Xml/PcdXml.py
BaseTools: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Xml / PcdXml.py
CommitLineData
4234283c
LG
1## @file\r
2# This file is used to parse a PCD file of .PKG file\r
3#\r
64285f15 4# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>\r
4234283c 5#\r
2e351cbe 6# SPDX-License-Identifier: BSD-2-Clause-Patent\r
4234283c
LG
7#\r
8\r
9'''\r
10PcdXml\r
11'''\r
12\r
13##\r
14# Import Modules\r
15#\r
16\r
17from Library.Xml.XmlRoutines import XmlElement\r
18from Library.Xml.XmlRoutines import XmlAttribute\r
19from Library.Xml.XmlRoutines import XmlNode\r
20from Library.Xml.XmlRoutines import CreateXmlElement\r
21from Library.Xml.XmlRoutines import XmlList\r
64285f15
YZ
22from Library.StringUtils import GetStringOfList\r
23from Library.StringUtils import ConvertNEToNOTEQ\r
24from Library.StringUtils import ConvertNOTEQToNE\r
4234283c
LG
25from Library import GlobalData\r
26from Object.POM.CommonObject import PcdObject\r
27from Object.POM.CommonObject import PcdErrorObject\r
28from Xml.CommonXml import HelpTextXml\r
421ccda3 29from Xml.CommonXml import PromptXml\r
4234283c
LG
30from Xml.CommonXml import CommonDefinesXml\r
31from Xml.XmlParserMisc import GetHelpTextList\r
421ccda3
HC
32from Xml.XmlParserMisc import GetPromptList\r
33import re\r
4234283c
LG
34\r
35##\r
36# PcdErrorXml\r
37#\r
38class PcdErrorXml(object):\r
39 def __init__(self):\r
40 self.ValidValueList = ''\r
41 self.ValidValueListLang = ''\r
42 self.ValidValueRange = ''\r
43 self.Expression = ''\r
44 self.ErrorNumber = ''\r
45 self.ErrorMessage = []\r
f7496d71 46\r
4234283c
LG
47 def FromXml(self, Item, Key):\r
48 self.ValidValueList = XmlElement(Item, '%s/ValidValueList' % Key)\r
49 self.ValidValueListLang = \\r
50 XmlAttribute(XmlNode(Item, '%s/ValidValueList' % Key), 'Lang')\r
421ccda3 51 self.ValidValueRange = self.TransferValidEpxr2ValidRange(XmlElement(Item, '%s/ValidValueRange' % Key))\r
4234283c
LG
52 self.Expression = XmlElement(Item, '%s/Expression' % Key)\r
53 self.ErrorNumber = XmlElement(Item, '%s/ErrorNumber' % Key)\r
54 for ErrMsg in XmlList(Item, '%s/ErrorMessage' % Key):\r
55 ErrorMessageString = XmlElement(ErrMsg, 'ErrorMessage')\r
56 ErrorMessageLang = \\r
57 XmlAttribute(XmlNode(ErrMsg, 'ErrorMessage'), 'Lang')\r
58 self.ErrorMessage.append((ErrorMessageLang, ErrorMessageString))\r
f7496d71 59\r
4234283c
LG
60 Error = PcdErrorObject()\r
61 Error.SetValidValue(self.ValidValueList)\r
62 Error.SetValidValueLang(self.ValidValueListLang)\r
63 Error.SetValidValueRange(self.ValidValueRange)\r
64 Error.SetExpression(self.Expression)\r
65 Error.SetErrorNumber(self.ErrorNumber)\r
66 Error.SetErrorMessageList(self.ErrorMessage)\r
f7496d71 67\r
4234283c
LG
68 return Error\r
69\r
70 def ToXml(self, PcdError, Key):\r
71 if self.Expression:\r
72 pass\r
73 AttributeList = []\r
74 NodeList = []\r
75 if PcdError.GetValidValue():\r
76 Element1 = \\r
77 CreateXmlElement('ValidValueList', PcdError.GetValidValue(), [], \\r
78 [['Lang', PcdError.GetValidValueLang()]])\r
79 NodeList.append(Element1)\r
80 if PcdError.GetValidValueRange():\r
421ccda3
HC
81 TansferedRangeStr = self.TransferValidRange2Expr(PcdError.GetTokenSpaceGuidCName(),\r
82 PcdError.GetCName(),\r
83 PcdError.GetValidValueRange())\r
4234283c
LG
84 Element1 = \\r
85 CreateXmlElement('ValidValueRange', \\r
421ccda3 86 TansferedRangeStr, [], [])\r
4234283c
LG
87 NodeList.append(Element1)\r
88 if PcdError.GetExpression():\r
89 NodeList.append(['Expression', PcdError.GetExpression()])\r
90 if PcdError.GetErrorNumber():\r
91 NodeList.append(['ErrorNumber', PcdError.GetErrorNumber()])\r
92 for Item in PcdError.GetErrorMessageList():\r
93 Element = \\r
94 CreateXmlElement('ErrorMessage', Item[1], [], [['Lang', Item[0]]])\r
95 NodeList.append(Element)\r
96 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
f7496d71 97\r
4234283c 98 return Root\r
f7496d71 99\r
421ccda3
HC
100 def TransferValidRange2Expr(self, TokenSpaceGuidCName, CName, ValidRange):\r
101 if self.Expression:\r
102 pass\r
103 INT_RANGE_PATTERN1 = '[\t\s]*[0-9]+[\t\s]*-[\t\s]*[0-9]+'\r
104 INT_RANGE_PATTERN2 = '[\t\s]*(LT|GT|LE|GE|XOR|EQ)[\t\s]+\d+[\t\s]*'\r
105 HEX_RANGE_PATTERN1 = \\r
106 '[\t\s]*0[xX][a-fA-F0-9]+[\t\s]*-[\t\s]*0[xX][a-fA-F0-9]+'\r
107 HEX_RANGE_PATTERN2 = '[\t\s]*(LT|GT|LE|GE|XOR|EQ)[\t\s]+0[xX][a-fA-F0-9]+[\t\s]*'\r
108 IntMatch1 = re.compile(INT_RANGE_PATTERN1)\r
109 IntMatch2 = re.compile(INT_RANGE_PATTERN2)\r
110 HexMatch1 = re.compile(HEX_RANGE_PATTERN1)\r
111 HexMatch2 = re.compile(HEX_RANGE_PATTERN2)\r
112 PcdName = '.'.join([TokenSpaceGuidCName, CName])\r
113 HexMatchedList = []\r
114 IntMatchedList = []\r
115 #\r
116 # Convert HEX2 format range\r
117 #\r
118 if HexMatch2:\r
119 for MatchObj in HexMatch2.finditer(ValidRange):\r
120 MatchStr = MatchObj.group()\r
121 TransferedRangeStr = ' '.join(['', PcdName, MatchStr.strip()])\r
f7496d71 122 ValidRange = ValidRange.replace(MatchStr, TransferedRangeStr)\r
421ccda3
HC
123 #\r
124 # Convert INT2 format range\r
125 #\r
126 if IntMatch2:\r
127 for MatchObj in IntMatch2.finditer(ValidRange):\r
128 MatchStr = MatchObj.group()\r
129 TransferedRangeStr = ' '.join(['', PcdName, MatchStr.strip()])\r
f7496d71 130 ValidRange = ValidRange.replace(MatchStr, TransferedRangeStr)\r
421ccda3
HC
131 #\r
132 # Convert HEX1 format range\r
133 #\r
134 if HexMatch1:\r
135 HexMatchedList += HexMatch1.findall(ValidRange)\r
f7496d71 136\r
421ccda3
HC
137 for MatchStr in HexMatchedList:\r
138 RangeItemList = MatchStr.strip().split('-')\r
139 TransferedRangeStr = '(%s GE %s) AND (%s LE %s)' % \\r
140 (PcdName, RangeItemList[0].strip(), PcdName, RangeItemList[1].strip())\r
f7496d71 141 ValidRange = ValidRange.replace(MatchStr, TransferedRangeStr)\r
421ccda3
HC
142 #\r
143 # Convert INT1 format range\r
144 #\r
145 if IntMatch1:\r
146 IntMatchedList += IntMatch1.findall(ValidRange)\r
f7496d71 147\r
421ccda3
HC
148 for MatchStr in IntMatchedList:\r
149 RangeItemList = MatchStr.strip().split('-')\r
150 TransferedRangeStr = '(%s GE %s) AND (%s LE %s)' % \\r
151 (PcdName, RangeItemList[0].strip(), PcdName, RangeItemList[1].strip())\r
f7496d71
LG
152 ValidRange = ValidRange.replace(MatchStr, TransferedRangeStr)\r
153\r
421ccda3 154 return ValidRange\r
f7496d71 155\r
421ccda3
HC
156 def TransferValidEpxr2ValidRange(self, ValidRangeExpr):\r
157 if self.Expression:\r
158 pass\r
f7496d71 159\r
421ccda3
HC
160 PCD_PATTERN = \\r
161 '[\t\s]*[_a-zA-Z][a-zA-Z0-9_]*[\t\s]*\.[\t\s]*[_a-zA-Z][a-zA-Z0-9_]*[\t\s]*'\r
162 IntPattern1 = \\r
163 '[\t\s]*\([\t\s]*'+PCD_PATTERN+'[\t\s]+GE[\t\s]+\d+[\t\s]*\)[\t\s]+AND[\t\s]+\([\t\s]*'+\\r
164 PCD_PATTERN+'[\t\s]+LE[\t\s]+\d+[\t\s]*\)'\r
165 IntPattern1 = IntPattern1.replace(' ', '')\r
166 IntPattern2 = '[\t\s]*'+PCD_PATTERN+'[\t\s]+(LT|GT|LE|GE|XOR|EQ)[\t\s]+\d+[\t\s]*'\r
f7496d71 167\r
421ccda3
HC
168 HexPattern1 = \\r
169 '[\t\s]*\([\t\s]*'+PCD_PATTERN+'[\t\s]+GE[\t\s]+0[xX][0-9a-fA-F]+[\t\s]*\)[\t\s]+AND[\t\s]+\([\t\s]*'+\\r
170 PCD_PATTERN+'[\t\s]+LE[\t\s]+0[xX][0-9a-fA-F]+[\t\s]*\)'\r
171 HexPattern1 = HexPattern1.replace(' ', '')\r
172 HexPattern2 = '[\t\s]*'+PCD_PATTERN+'[\t\s]+(LT|GT|LE|GE|XOR|EQ)[\t\s]+0[xX][0-9a-zA-Z]+[\t\s]*'\r
f7496d71 173\r
421ccda3
HC
174 #\r
175 # Do the Hex1 conversion\r
f7496d71 176 #\r
421ccda3
HC
177 HexMatchedList = re.compile(HexPattern1).findall(ValidRangeExpr)\r
178 HexRangeDict = {}\r
179 for HexMatchedItem in HexMatchedList:\r
180 #\r
181 # To match items on both sides of '-'\r
182 #\r
183 RangeItemList = re.compile('[\t\s]*0[xX][0-9a-fA-F]+[\t\s]*').findall(HexMatchedItem)\r
184 if RangeItemList and len(RangeItemList) == 2:\r
f7496d71
LG
185 HexRangeDict[HexMatchedItem] = RangeItemList\r
186\r
421ccda3
HC
187 for Key in HexRangeDict.keys():\r
188 MaxItem = MixItem = ''\r
189 if int(HexRangeDict[Key][0], 16) > int(HexRangeDict[Key][1], 16):\r
190 MaxItem = HexRangeDict[Key][0]\r
191 MixItem = HexRangeDict[Key][1]\r
192 else:\r
193 MaxItem = HexRangeDict[Key][1]\r
194 MixItem = HexRangeDict[Key][0]\r
f7496d71 195\r
421ccda3
HC
196 Range = ' %s - %s' % (MixItem.strip(), MaxItem.strip())\r
197 ValidRangeExpr = ValidRangeExpr.replace(Key, Range)\r
198 #\r
199 # Do the INT1 conversion\r
200 #\r
201 IntRangeDict = {}\r
202 IntMatchList = re.compile(IntPattern1).findall(ValidRangeExpr)\r
203 for MatchedItem in IntMatchList:\r
204 #\r
205 # To match items on both sides of '-'\r
206 #\r
207 RangeItemList = re.compile('[\t\s]*\d+[\t\s]*').findall(MatchedItem)\r
f7496d71 208 if RangeItemList and len(RangeItemList) == 2:\r
421ccda3 209 IntRangeDict[MatchedItem] = RangeItemList\r
f7496d71 210\r
421ccda3
HC
211 for Key in IntRangeDict.keys():\r
212 MaxItem = MixItem = ''\r
213 if int(IntRangeDict[Key][0]) > int(IntRangeDict[Key][1]):\r
214 MaxItem = IntRangeDict[Key][0]\r
215 MixItem = IntRangeDict[Key][1]\r
216 else:\r
217 MaxItem = IntRangeDict[Key][1]\r
218 MixItem = IntRangeDict[Key][0]\r
f7496d71 219\r
421ccda3
HC
220 Range = ' %s - %s' % (MixItem.strip(), MaxItem.strip())\r
221 ValidRangeExpr = ValidRangeExpr.replace(Key, Range)\r
222 #\r
f7496d71 223 # Do the HEX2 conversion\r
421ccda3
HC
224 #\r
225 for MatchObj in re.compile(HexPattern2).finditer(ValidRangeExpr):\r
226 MatchStr = MatchObj.group()\r
227 Range = re.compile(PCD_PATTERN).sub(' ', MatchStr)\r
228 ValidRangeExpr = ValidRangeExpr.replace(MatchStr, Range)\r
229 #\r
230 # Do the INT2 conversion\r
231 #\r
232 for MatchObj in re.compile(IntPattern2).finditer(ValidRangeExpr):\r
233 MatchStr = MatchObj.group()\r
234 Range = re.compile(PCD_PATTERN).sub(' ', MatchStr)\r
235 ValidRangeExpr = ValidRangeExpr.replace(MatchStr, Range)\r
236\r
237 return ValidRangeExpr\r
f7496d71
LG
238\r
239\r
4234283c
LG
240\r
241 def __str__(self):\r
242 return "ValidValueList = %s ValidValueListLang = %s ValidValueRange \\r
243 = %s Expression = %s ErrorNumber = %s %s" % \\r
244 (self.ValidValueList, self.ValidValueListLang, self.ValidValueRange, \\r
245 self.Expression, self.ErrorNumber, self.ErrorMessage)\r
246\r
247##\r
248# PcdEntryXml\r
249#\r
250class PcdEntryXml(object):\r
251 def __init__(self):\r
252 self.PcdItemType = ''\r
253 self.PcdUsage = ''\r
254 self.TokenSpaceGuidCName = ''\r
255 self.TokenSpaceGuidValue = ''\r
256 self.Token = ''\r
257 self.CName = ''\r
258 self.PcdCName = ''\r
259 self.DatumType = ''\r
260 self.ValidUsage = ''\r
261 self.DefaultValue = ''\r
262 self.MaxDatumSize = ''\r
263 self.Value = ''\r
264 self.Offset = ''\r
265 self.CommonDefines = CommonDefinesXml()\r
421ccda3 266 self.Prompt = []\r
4234283c
LG
267 self.HelpText = []\r
268 self.PcdError = []\r
269\r
270 ##\r
271 # AsBuilt will use FromXml\r
f7496d71 272 #\r
4234283c
LG
273 def FromXml(self, Item, Key):\r
274 self.PcdItemType = \\r
275 XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdItemType')\r
276 self.PcdUsage = XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdUsage')\r
277 self.TokenSpaceGuidCName = \\r
278 XmlElement(Item, '%s/TokenSpaceGuidCname' % Key)\r
279 self.TokenSpaceGuidValue = \\r
280 XmlElement(Item, '%s/TokenSpaceGuidValue' % Key)\r
281 self.Token = XmlElement(Item, '%s/Token' % Key)\r
282 self.CName = XmlElement(Item, '%s/CName' % Key)\r
283 self.PcdCName = XmlElement(Item, '%s/PcdCName' % Key)\r
284 self.DatumType = XmlElement(Item, '%s/DatumType' % Key)\r
285 self.ValidUsage = XmlElement(Item, '%s/ValidUsage' % Key)\r
286 if not GlobalData.gIS_BINARY_INF:\r
287 self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)\r
288 else:\r
289 self.DefaultValue = XmlElement(Item, '%s/Value' % Key)\r
290 self.MaxDatumSize = XmlElement(Item, '%s/MaxDatumSize' % Key)\r
291 self.Value = XmlElement(Item, '%s/Value' % Key)\r
292 self.Offset = XmlElement(Item, '%s/Offset' % Key)\r
293 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
f7496d71 294\r
4234283c
LG
295 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
296 HelpTextObj = HelpTextXml()\r
297 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
298 self.HelpText.append(HelpTextObj)\r
299 for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):\r
300 PcdErrorObjXml = PcdErrorXml()\r
301 PcdErrorObj = PcdErrorObjXml.FromXml(PcdErrorItem, 'PcdError')\r
302 self.PcdError.append(PcdErrorObj)\r
f7496d71 303\r
4234283c 304 self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)\r
f7496d71 305\r
4234283c
LG
306 PcdEntry = PcdObject()\r
307 PcdEntry.SetSupArchList(self.CommonDefines.SupArchList)\r
308 PcdEntry.SetTokenSpaceGuidCName(self.TokenSpaceGuidCName)\r
309 PcdEntry.SetTokenSpaceGuidValue(self.TokenSpaceGuidValue)\r
310 PcdEntry.SetToken(self.Token)\r
311 PcdEntry.SetOffset(self.Offset)\r
312 PcdEntry.SetCName(self.CName)\r
313 PcdEntry.SetPcdCName(self.PcdCName)\r
314 PcdEntry.SetDatumType(self.DatumType)\r
315 PcdEntry.SetValidUsage(self.ValidUsage)\r
316 PcdEntry.SetDefaultValue(self.DefaultValue)\r
317 PcdEntry.SetMaxDatumSize(self.MaxDatumSize)\r
318 PcdEntry.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))\r
319 PcdEntry.SetItemType(self.PcdItemType)\r
320\r
321 PcdEntry.SetHelpTextList(GetHelpTextList(self.HelpText))\r
322 PcdEntry.SetPcdErrorsList(self.PcdError)\r
f7496d71 323\r
4234283c
LG
324 return PcdEntry\r
325 ##\r
326 # Package will use FromXml2\r
f7496d71 327 #\r
4234283c
LG
328 def FromXml2(self, Item, Key):\r
329 self.TokenSpaceGuidCName = \\r
330 XmlElement(Item, '%s/TokenSpaceGuidCname' % Key)\r
331 self.Token = XmlElement(Item, '%s/Token' % Key)\r
332 self.CName = XmlElement(Item, '%s/CName' % Key)\r
333 self.DatumType = XmlElement(Item, '%s/DatumType' % Key)\r
334 self.ValidUsage = XmlElement(Item, '%s/ValidUsage' % Key)\r
335 self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)\r
336 self.MaxDatumSize = XmlElement(Item, '%s/MaxDatumSize' % Key)\r
337 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
421ccda3
HC
338 for PromptItem in XmlList(Item, '%s/Prompt' % Key):\r
339 PromptObj = PromptXml()\r
340 PromptObj.FromXml(PromptItem, '%s/Prompt' % Key)\r
341 self.Prompt.append(PromptObj)\r
4234283c
LG
342 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
343 HelpTextObj = HelpTextXml()\r
344 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
345 self.HelpText.append(HelpTextObj)\r
346 for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):\r
347 PcdErrorObjXml = PcdErrorXml()\r
348 PcdErrorObj = PcdErrorObjXml.FromXml(PcdErrorItem, 'PcdError')\r
349 self.PcdError.append(PcdErrorObj)\r
f7496d71 350\r
4234283c 351 self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)\r
f7496d71 352\r
4234283c
LG
353 PcdEntry = PcdObject()\r
354 PcdEntry.SetSupArchList(self.CommonDefines.SupArchList)\r
355 PcdEntry.SetSupModuleList(self.CommonDefines.SupModList)\r
356 PcdEntry.SetTokenSpaceGuidCName(self.TokenSpaceGuidCName)\r
357 PcdEntry.SetToken(self.Token)\r
358 PcdEntry.SetCName(self.CName)\r
359 PcdEntry.SetDatumType(self.DatumType)\r
360 PcdEntry.SetValidUsage(self.ValidUsage)\r
361 PcdEntry.SetDefaultValue(self.DefaultValue)\r
362 PcdEntry.SetMaxDatumSize(self.MaxDatumSize)\r
363 PcdEntry.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))\r
f7496d71 364\r
421ccda3 365 PcdEntry.SetPromptList(GetPromptList(self.Prompt))\r
4234283c
LG
366 PcdEntry.SetHelpTextList(GetHelpTextList(self.HelpText))\r
367 PcdEntry.SetPcdErrorsList(self.PcdError)\r
f7496d71 368\r
4234283c
LG
369 return PcdEntry\r
370\r
371 ##\r
372 # Module will use FromXml3\r
373 #\r
374 def FromXml3(self, Item, Key):\r
375 self.PcdItemType = \\r
376 XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdItemType')\r
377 self.PcdUsage = XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdUsage')\r
378 self.TokenSpaceGuidCName = \\r
379 XmlElement(Item, '%s/TokenSpaceGuidCName' % Key)\r
380 self.CName = XmlElement(Item, '%s/CName' % Key)\r
381 self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)\r
382 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
383 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
384 HelpTextObj = HelpTextXml()\r
385 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
386 self.HelpText.append(HelpTextObj)\r
387 for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):\r
388 PcdErrorObj = PcdErrorXml()\r
389 PcdErrorObj.FromXml(PcdErrorItem, 'PcdError')\r
390 self.PcdError.append(PcdErrorObj)\r
f7496d71 391\r
4234283c 392 self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)\r
f7496d71 393\r
4234283c
LG
394 PcdEntry = PcdObject()\r
395 PcdEntry.SetSupArchList(self.CommonDefines.SupArchList)\r
396 PcdEntry.SetTokenSpaceGuidCName(self.TokenSpaceGuidCName)\r
397 PcdEntry.SetCName(self.CName)\r
398 PcdEntry.SetValidUsage(self.PcdUsage)\r
399 PcdEntry.SetDefaultValue(self.DefaultValue)\r
400 PcdEntry.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))\r
401 PcdEntry.SetItemType(self.PcdItemType)\r
402\r
403 PcdEntry.SetHelpTextList(GetHelpTextList(self.HelpText))\r
404 PcdEntry.SetPcdErrorsList(self.PcdError)\r
f7496d71 405\r
4234283c 406 return PcdEntry\r
f7496d71 407\r
4234283c
LG
408 def ToXml(self, PcdEntry, Key):\r
409 if self.PcdCName:\r
410 pass\r
f7496d71 411\r
4234283c 412 DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())\r
f7496d71 413\r
4234283c
LG
414 AttributeList = \\r
415 [['SupArchList', GetStringOfList(PcdEntry.GetSupArchList())], \\r
416 ['PcdUsage', PcdEntry.GetValidUsage()], \\r
417 ['PcdItemType', PcdEntry.GetItemType()], \\r
418 ['FeatureFlag', PcdEntry.GetFeatureFlag()],\r
419 ]\r
420 NodeList = [['TokenSpaceGuidCname', PcdEntry.GetTokenSpaceGuidCName()],\r
421 ['TokenSpaceGuidValue', PcdEntry.GetTokenSpaceGuidValue()],\r
f7496d71 422 ['Token', PcdEntry.GetToken()],\r
4234283c
LG
423 ['CName', PcdEntry.GetCName()],\r
424 ['DatumType', PcdEntry.GetDatumType()],\r
425 ['ValidUsage', GetStringOfList(PcdEntry.GetValidUsage())],\r
426 ['DefaultValue', DefaultValue],\r
427 ['MaxDatumSize', PcdEntry.GetMaxDatumSize()],\r
428 ['Offset', PcdEntry.GetOffset()],\r
429 ]\r
f7496d71 430\r
4234283c
LG
431 for Item in PcdEntry.GetHelpTextList():\r
432 Tmp = HelpTextXml()\r
433 NodeList.append(Tmp.ToXml(Item))\r
434 for Item in PcdEntry.GetPcdErrorsList():\r
435 Tmp = PcdErrorXml()\r
436 NodeList.append(Tmp.ToXml(Item, 'PcdError'))\r
f7496d71 437\r
4234283c 438 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
f7496d71 439\r
4234283c
LG
440 return Root\r
441 ##\r
442 # Package will use ToXml2\r
f7496d71 443 #\r
4234283c
LG
444 def ToXml2(self, PcdEntry, Key):\r
445 if self.PcdCName:\r
446 pass\r
f7496d71 447\r
4234283c 448 DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())\r
f7496d71 449\r
4234283c
LG
450 AttributeList = \\r
451 [['SupArchList', GetStringOfList(PcdEntry.GetSupArchList())], \\r
452 ['SupModList', GetStringOfList(PcdEntry.GetSupModuleList())]\r
453 ]\r
454 NodeList = [['TokenSpaceGuidCname', PcdEntry.GetTokenSpaceGuidCName()],\r
455 ['Token', PcdEntry.GetToken()],\r
456 ['CName', PcdEntry.GetCName()],\r
457 ['DatumType', PcdEntry.GetDatumType()],\r
458 ['ValidUsage', GetStringOfList(PcdEntry.GetValidUsage())],\r
459 ['DefaultValue', DefaultValue],\r
460 ['MaxDatumSize', PcdEntry.GetMaxDatumSize()],\r
461 ]\r
421ccda3
HC
462 for Item in PcdEntry.GetPromptList():\r
463 Tmp = PromptXml()\r
464 NodeList.append(Tmp.ToXml(Item))\r
f7496d71 465\r
4234283c
LG
466 for Item in PcdEntry.GetHelpTextList():\r
467 Tmp = HelpTextXml()\r
468 NodeList.append(Tmp.ToXml(Item))\r
469\r
470 for Item in PcdEntry.GetPcdErrorsList():\r
471 Tmp = PcdErrorXml()\r
472 NodeList.append(Tmp.ToXml(Item, 'PcdError'))\r
f7496d71 473\r
4234283c 474 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
f7496d71 475\r
4234283c
LG
476 return Root\r
477 ##\r
478 # Module will use ToXml3\r
479 #\r
480 def ToXml3(self, PcdEntry, Key):\r
481 if self.PcdCName:\r
482 pass\r
f7496d71 483\r
4234283c 484 DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())\r
f7496d71 485\r
4234283c
LG
486 AttributeList = \\r
487 [['SupArchList', GetStringOfList(PcdEntry.GetSupArchList())], \\r
488 ['PcdUsage', PcdEntry.GetValidUsage()], \\r
489 ['PcdItemType', PcdEntry.GetItemType()], \\r
490 ['FeatureFlag', ConvertNEToNOTEQ(PcdEntry.GetFeatureFlag())],\r
491 ]\r
492 NodeList = [['CName', PcdEntry.GetCName()],\r
493 ['TokenSpaceGuidCName', PcdEntry.GetTokenSpaceGuidCName()],\r
494 ['DefaultValue', DefaultValue],\r
495 ]\r
f7496d71 496\r
4234283c
LG
497 for Item in PcdEntry.GetHelpTextList():\r
498 Tmp = HelpTextXml()\r
499 NodeList.append(Tmp.ToXml(Item))\r
500 for Item in PcdEntry.GetPcdErrorsList():\r
501 Tmp = PcdErrorXml()\r
502 NodeList.append(Tmp.ToXml(Item, 'PcdError'))\r
f7496d71 503\r
4234283c 504 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
f7496d71 505\r
4234283c 506 return Root\r
f7496d71 507\r
4234283c
LG
508 ##\r
509 # AsBuild Module will use ToXml4\r
510 #\r
511 def ToXml4(self, PcdEntry, Key):\r
512 if self.PcdCName:\r
513 pass\r
f7496d71 514\r
4234283c 515 DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())\r
f7496d71 516\r
4234283c 517 AttributeList = []\r
f7496d71 518\r
4234283c
LG
519 NodeList = [\r
520 ['TokenSpaceGuidValue', PcdEntry.GetTokenSpaceGuidValue()],\r
521 ['PcdCName', PcdEntry.GetCName()],\r
522 ['Token', PcdEntry.GetToken()],\r
523 ['DatumType', PcdEntry.GetDatumType()],\r
524 ['MaxDatumSize', PcdEntry.GetMaxDatumSize()],\r
525 ['Value', DefaultValue],\r
526 ['Offset', PcdEntry.GetOffset()]\r
527 ]\r
f7496d71 528\r
4234283c
LG
529 for Item in PcdEntry.GetHelpTextList():\r
530 Tmp = HelpTextXml()\r
531 NodeList.append(Tmp.ToXml(Item))\r
532 for Item in PcdEntry.GetPcdErrorsList():\r
533 Tmp = PcdErrorXml()\r
534 NodeList.append(Tmp.ToXml(Item, 'PcdError'))\r
f7496d71 535\r
4234283c 536 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
f7496d71 537\r
4234283c 538 return Root\r
f7496d71 539\r
4234283c
LG
540\r
541 def __str__(self):\r
542 Str = \\r
543 ('PcdItemType = %s PcdUsage = %s TokenSpaceGuidCName = %s \\r
544 TokenSpaceGuidValue = %s Token = %s CName = %s PcdCName = %s \\r
545 DatumType = %s ValidUsage = %s DefaultValue = %s MaxDatumSize = %s \\r
546 Value = %s Offset = %s %s') % \\r
547 (self.PcdItemType, self.PcdUsage, self.TokenSpaceGuidCName, \\r
548 self.TokenSpaceGuidValue, self.Token, self.CName, self.PcdCName, \\r
549 self.DatumType, self.ValidUsage, self.DefaultValue, \\r
550 self.MaxDatumSize, self.Value, self.Offset, self.CommonDefines)\r
551 for Item in self.HelpText:\r
552 Str = Str + "\n\t" + str(Item)\r
553 for Item in self.PcdError:\r
554 Str = Str + "\n\tPcdError:" + str(Item)\r
421ccda3 555 return Str\r