]>
Commit | Line | Data |
---|---|---|
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 | |
10 | PcdXml\r | |
11 | '''\r | |
12 | \r | |
13 | ##\r | |
14 | # Import Modules\r | |
15 | #\r | |
16 | \r | |
17 | from Library.Xml.XmlRoutines import XmlElement\r | |
18 | from Library.Xml.XmlRoutines import XmlAttribute\r | |
19 | from Library.Xml.XmlRoutines import XmlNode\r | |
20 | from Library.Xml.XmlRoutines import CreateXmlElement\r | |
21 | from Library.Xml.XmlRoutines import XmlList\r | |
64285f15 YZ |
22 | from Library.StringUtils import GetStringOfList\r |
23 | from Library.StringUtils import ConvertNEToNOTEQ\r | |
24 | from Library.StringUtils import ConvertNOTEQToNE\r | |
4234283c LG |
25 | from Library import GlobalData\r |
26 | from Object.POM.CommonObject import PcdObject\r | |
27 | from Object.POM.CommonObject import PcdErrorObject\r | |
28 | from Xml.CommonXml import HelpTextXml\r | |
421ccda3 | 29 | from Xml.CommonXml import PromptXml\r |
4234283c LG |
30 | from Xml.CommonXml import CommonDefinesXml\r |
31 | from Xml.XmlParserMisc import GetHelpTextList\r | |
421ccda3 HC |
32 | from Xml.XmlParserMisc import GetPromptList\r |
33 | import re\r | |
4234283c LG |
34 | \r |
35 | ##\r | |
36 | # PcdErrorXml\r | |
37 | #\r | |
38 | class 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 | |
250 | class 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 |