]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - 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
1## @file\r
2# This file is used to parse a PCD file of .PKG file\r
3#\r
4# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>\r
5#\r
6# SPDX-License-Identifier: BSD-2-Clause-Patent\r
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
22from Library.StringUtils import GetStringOfList\r
23from Library.StringUtils import ConvertNEToNOTEQ\r
24from Library.StringUtils import ConvertNOTEQToNE\r
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
29from Xml.CommonXml import PromptXml\r
30from Xml.CommonXml import CommonDefinesXml\r
31from Xml.XmlParserMisc import GetHelpTextList\r
32from Xml.XmlParserMisc import GetPromptList\r
33import re\r
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
46\r
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
51 self.ValidValueRange = self.TransferValidEpxr2ValidRange(XmlElement(Item, '%s/ValidValueRange' % Key))\r
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
59\r
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
67\r
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
81 TansferedRangeStr = self.TransferValidRange2Expr(PcdError.GetTokenSpaceGuidCName(),\r
82 PcdError.GetCName(),\r
83 PcdError.GetValidValueRange())\r
84 Element1 = \\r
85 CreateXmlElement('ValidValueRange', \\r
86 TansferedRangeStr, [], [])\r
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
97\r
98 return Root\r
99\r
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
122 ValidRange = ValidRange.replace(MatchStr, TransferedRangeStr)\r
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
130 ValidRange = ValidRange.replace(MatchStr, TransferedRangeStr)\r
131 #\r
132 # Convert HEX1 format range\r
133 #\r
134 if HexMatch1:\r
135 HexMatchedList += HexMatch1.findall(ValidRange)\r
136\r
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
141 ValidRange = ValidRange.replace(MatchStr, TransferedRangeStr)\r
142 #\r
143 # Convert INT1 format range\r
144 #\r
145 if IntMatch1:\r
146 IntMatchedList += IntMatch1.findall(ValidRange)\r
147\r
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
152 ValidRange = ValidRange.replace(MatchStr, TransferedRangeStr)\r
153\r
154 return ValidRange\r
155\r
156 def TransferValidEpxr2ValidRange(self, ValidRangeExpr):\r
157 if self.Expression:\r
158 pass\r
159\r
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
167\r
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
173\r
174 #\r
175 # Do the Hex1 conversion\r
176 #\r
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
185 HexRangeDict[HexMatchedItem] = RangeItemList\r
186\r
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
195\r
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
208 if RangeItemList and len(RangeItemList) == 2:\r
209 IntRangeDict[MatchedItem] = RangeItemList\r
210\r
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
219\r
220 Range = ' %s - %s' % (MixItem.strip(), MaxItem.strip())\r
221 ValidRangeExpr = ValidRangeExpr.replace(Key, Range)\r
222 #\r
223 # Do the HEX2 conversion\r
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
238\r
239\r
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
266 self.Prompt = []\r
267 self.HelpText = []\r
268 self.PcdError = []\r
269\r
270 ##\r
271 # AsBuilt will use FromXml\r
272 #\r
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
294\r
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
303\r
304 self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)\r
305\r
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
323\r
324 return PcdEntry\r
325 ##\r
326 # Package will use FromXml2\r
327 #\r
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
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
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
350\r
351 self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)\r
352\r
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
364\r
365 PcdEntry.SetPromptList(GetPromptList(self.Prompt))\r
366 PcdEntry.SetHelpTextList(GetHelpTextList(self.HelpText))\r
367 PcdEntry.SetPcdErrorsList(self.PcdError)\r
368\r
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
391\r
392 self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)\r
393\r
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
405\r
406 return PcdEntry\r
407\r
408 def ToXml(self, PcdEntry, Key):\r
409 if self.PcdCName:\r
410 pass\r
411\r
412 DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())\r
413\r
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
422 ['Token', PcdEntry.GetToken()],\r
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
430\r
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
437\r
438 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
439\r
440 return Root\r
441 ##\r
442 # Package will use ToXml2\r
443 #\r
444 def ToXml2(self, PcdEntry, Key):\r
445 if self.PcdCName:\r
446 pass\r
447\r
448 DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())\r
449\r
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
462 for Item in PcdEntry.GetPromptList():\r
463 Tmp = PromptXml()\r
464 NodeList.append(Tmp.ToXml(Item))\r
465\r
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
473\r
474 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
475\r
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
483\r
484 DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())\r
485\r
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
496\r
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
503\r
504 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
505\r
506 return Root\r
507\r
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
514\r
515 DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())\r
516\r
517 AttributeList = []\r
518\r
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
528\r
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
535\r
536 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
537\r
538 return Root\r
539\r
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
555 return Str\r