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