]>
git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/Python/UPT/Xml/PcdXml.py
2 # This file is used to parse a PCD file of .PKG file
4 # Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
6 # This program and the accompanying materials are licensed and made available
7 # under the terms and conditions of the BSD License which accompanies this
8 # distribution. The full text of the license may be found at
9 # http://opensource.org/licenses/bsd-license.php
11 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
23 from Library
.Xml
.XmlRoutines
import XmlElement
24 from Library
.Xml
.XmlRoutines
import XmlAttribute
25 from Library
.Xml
.XmlRoutines
import XmlNode
26 from Library
.Xml
.XmlRoutines
import CreateXmlElement
27 from Library
.Xml
.XmlRoutines
import XmlList
28 from Library
.String
import GetStringOfList
29 from Library
.String
import ConvertNEToNOTEQ
30 from Library
.String
import ConvertNOTEQToNE
31 from Library
import GlobalData
32 from Object
.POM
.CommonObject
import PcdObject
33 from Object
.POM
.CommonObject
import PcdErrorObject
34 from Xml
.CommonXml
import HelpTextXml
35 from Xml
.CommonXml
import CommonDefinesXml
36 from Xml
.XmlParserMisc
import GetHelpTextList
41 class PcdErrorXml(object):
43 self
.ValidValueList
= ''
44 self
.ValidValueListLang
= ''
45 self
.ValidValueRange
= ''
48 self
.ErrorMessage
= []
50 def FromXml(self
, Item
, Key
):
51 self
.ValidValueList
= XmlElement(Item
, '%s/ValidValueList' % Key
)
52 self
.ValidValueListLang
= \
53 XmlAttribute(XmlNode(Item
, '%s/ValidValueList' % Key
), 'Lang')
54 self
.ValidValueRange
= XmlElement(Item
, '%s/ValidValueRange' % Key
)
55 self
.Expression
= XmlElement(Item
, '%s/Expression' % Key
)
56 self
.ErrorNumber
= XmlElement(Item
, '%s/ErrorNumber' % Key
)
57 for ErrMsg
in XmlList(Item
, '%s/ErrorMessage' % Key
):
58 ErrorMessageString
= XmlElement(ErrMsg
, 'ErrorMessage')
60 XmlAttribute(XmlNode(ErrMsg
, 'ErrorMessage'), 'Lang')
61 self
.ErrorMessage
.append((ErrorMessageLang
, ErrorMessageString
))
63 Error
= PcdErrorObject()
64 Error
.SetValidValue(self
.ValidValueList
)
65 Error
.SetValidValueLang(self
.ValidValueListLang
)
66 Error
.SetValidValueRange(self
.ValidValueRange
)
67 Error
.SetExpression(self
.Expression
)
68 Error
.SetErrorNumber(self
.ErrorNumber
)
69 Error
.SetErrorMessageList(self
.ErrorMessage
)
73 def ToXml(self
, PcdError
, Key
):
78 if PcdError
.GetValidValue():
80 CreateXmlElement('ValidValueList', PcdError
.GetValidValue(), [], \
81 [['Lang', PcdError
.GetValidValueLang()]])
82 NodeList
.append(Element1
)
83 if PcdError
.GetValidValueRange():
85 CreateXmlElement('ValidValueRange', \
86 PcdError
.GetValidValueRange(), [], [])
87 NodeList
.append(Element1
)
88 if PcdError
.GetExpression():
89 NodeList
.append(['Expression', PcdError
.GetExpression()])
90 if PcdError
.GetErrorNumber():
91 NodeList
.append(['ErrorNumber', PcdError
.GetErrorNumber()])
92 for Item
in PcdError
.GetErrorMessageList():
94 CreateXmlElement('ErrorMessage', Item
[1], [], [['Lang', Item
[0]]])
95 NodeList
.append(Element
)
96 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
101 return "ValidValueList = %s ValidValueListLang = %s ValidValueRange \
102 = %s Expression = %s ErrorNumber = %s %s" % \
103 (self
.ValidValueList
, self
.ValidValueListLang
, self
.ValidValueRange
, \
104 self
.Expression
, self
.ErrorNumber
, self
.ErrorMessage
)
109 class PcdEntryXml(object):
111 self
.PcdItemType
= ''
113 self
.TokenSpaceGuidCName
= ''
114 self
.TokenSpaceGuidValue
= ''
120 self
.DefaultValue
= ''
121 self
.MaxDatumSize
= ''
124 self
.CommonDefines
= CommonDefinesXml()
129 # AsBuilt will use FromXml
131 def FromXml(self
, Item
, Key
):
133 XmlAttribute(XmlNode(Item
, '%s' % Key
), 'PcdItemType')
134 self
.PcdUsage
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'PcdUsage')
135 self
.TokenSpaceGuidCName
= \
136 XmlElement(Item
, '%s/TokenSpaceGuidCname' % Key
)
137 self
.TokenSpaceGuidValue
= \
138 XmlElement(Item
, '%s/TokenSpaceGuidValue' % Key
)
139 self
.Token
= XmlElement(Item
, '%s/Token' % Key
)
140 self
.CName
= XmlElement(Item
, '%s/CName' % Key
)
141 self
.PcdCName
= XmlElement(Item
, '%s/PcdCName' % Key
)
142 self
.DatumType
= XmlElement(Item
, '%s/DatumType' % Key
)
143 self
.ValidUsage
= XmlElement(Item
, '%s/ValidUsage' % Key
)
144 if not GlobalData
.gIS_BINARY_INF
:
145 self
.DefaultValue
= XmlElement(Item
, '%s/DefaultValue' % Key
)
147 self
.DefaultValue
= XmlElement(Item
, '%s/Value' % Key
)
148 self
.MaxDatumSize
= XmlElement(Item
, '%s/MaxDatumSize' % Key
)
149 self
.Value
= XmlElement(Item
, '%s/Value' % Key
)
150 self
.Offset
= XmlElement(Item
, '%s/Offset' % Key
)
151 self
.CommonDefines
.FromXml(XmlNode(Item
, '%s' % Key
), Key
)
152 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
153 HelpTextObj
= HelpTextXml()
154 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
155 self
.HelpText
.append(HelpTextObj
)
156 for PcdErrorItem
in XmlList(Item
, '%s/PcdError' % Key
):
157 PcdErrorObjXml
= PcdErrorXml()
158 PcdErrorObj
= PcdErrorObjXml
.FromXml(PcdErrorItem
, 'PcdError')
159 self
.PcdError
.append(PcdErrorObj
)
161 self
.DefaultValue
= ConvertNOTEQToNE(self
.DefaultValue
)
163 PcdEntry
= PcdObject()
164 PcdEntry
.SetSupArchList(self
.CommonDefines
.SupArchList
)
165 PcdEntry
.SetTokenSpaceGuidCName(self
.TokenSpaceGuidCName
)
166 PcdEntry
.SetTokenSpaceGuidValue(self
.TokenSpaceGuidValue
)
167 PcdEntry
.SetToken(self
.Token
)
168 PcdEntry
.SetOffset(self
.Offset
)
169 PcdEntry
.SetCName(self
.CName
)
170 PcdEntry
.SetPcdCName(self
.PcdCName
)
171 PcdEntry
.SetDatumType(self
.DatumType
)
172 PcdEntry
.SetValidUsage(self
.ValidUsage
)
173 PcdEntry
.SetDefaultValue(self
.DefaultValue
)
174 PcdEntry
.SetMaxDatumSize(self
.MaxDatumSize
)
175 PcdEntry
.SetFeatureFlag(ConvertNOTEQToNE(self
.CommonDefines
.FeatureFlag
))
176 PcdEntry
.SetItemType(self
.PcdItemType
)
178 PcdEntry
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
179 PcdEntry
.SetPcdErrorsList(self
.PcdError
)
183 # Package will use FromXml2
185 def FromXml2(self
, Item
, Key
):
186 self
.TokenSpaceGuidCName
= \
187 XmlElement(Item
, '%s/TokenSpaceGuidCname' % Key
)
188 self
.Token
= XmlElement(Item
, '%s/Token' % Key
)
189 self
.CName
= XmlElement(Item
, '%s/CName' % Key
)
190 self
.DatumType
= XmlElement(Item
, '%s/DatumType' % Key
)
191 self
.ValidUsage
= XmlElement(Item
, '%s/ValidUsage' % Key
)
192 self
.DefaultValue
= XmlElement(Item
, '%s/DefaultValue' % Key
)
193 self
.MaxDatumSize
= XmlElement(Item
, '%s/MaxDatumSize' % Key
)
194 self
.CommonDefines
.FromXml(XmlNode(Item
, '%s' % Key
), Key
)
195 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
196 HelpTextObj
= HelpTextXml()
197 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
198 self
.HelpText
.append(HelpTextObj
)
199 for PcdErrorItem
in XmlList(Item
, '%s/PcdError' % Key
):
200 PcdErrorObjXml
= PcdErrorXml()
201 PcdErrorObj
= PcdErrorObjXml
.FromXml(PcdErrorItem
, 'PcdError')
202 self
.PcdError
.append(PcdErrorObj
)
204 self
.DefaultValue
= ConvertNOTEQToNE(self
.DefaultValue
)
206 PcdEntry
= PcdObject()
207 PcdEntry
.SetSupArchList(self
.CommonDefines
.SupArchList
)
208 PcdEntry
.SetSupModuleList(self
.CommonDefines
.SupModList
)
209 PcdEntry
.SetTokenSpaceGuidCName(self
.TokenSpaceGuidCName
)
210 PcdEntry
.SetToken(self
.Token
)
211 PcdEntry
.SetCName(self
.CName
)
212 PcdEntry
.SetDatumType(self
.DatumType
)
213 PcdEntry
.SetValidUsage(self
.ValidUsage
)
214 PcdEntry
.SetDefaultValue(self
.DefaultValue
)
215 PcdEntry
.SetMaxDatumSize(self
.MaxDatumSize
)
216 PcdEntry
.SetFeatureFlag(ConvertNOTEQToNE(self
.CommonDefines
.FeatureFlag
))
218 PcdEntry
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
219 PcdEntry
.SetPcdErrorsList(self
.PcdError
)
224 # Module will use FromXml3
226 def FromXml3(self
, Item
, Key
):
228 XmlAttribute(XmlNode(Item
, '%s' % Key
), 'PcdItemType')
229 self
.PcdUsage
= XmlAttribute(XmlNode(Item
, '%s' % Key
), 'PcdUsage')
230 self
.TokenSpaceGuidCName
= \
231 XmlElement(Item
, '%s/TokenSpaceGuidCName' % Key
)
232 self
.CName
= XmlElement(Item
, '%s/CName' % Key
)
233 self
.DefaultValue
= XmlElement(Item
, '%s/DefaultValue' % Key
)
234 self
.CommonDefines
.FromXml(XmlNode(Item
, '%s' % Key
), Key
)
235 for HelpTextItem
in XmlList(Item
, '%s/HelpText' % Key
):
236 HelpTextObj
= HelpTextXml()
237 HelpTextObj
.FromXml(HelpTextItem
, '%s/HelpText' % Key
)
238 self
.HelpText
.append(HelpTextObj
)
239 for PcdErrorItem
in XmlList(Item
, '%s/PcdError' % Key
):
240 PcdErrorObj
= PcdErrorXml()
241 PcdErrorObj
.FromXml(PcdErrorItem
, 'PcdError')
242 self
.PcdError
.append(PcdErrorObj
)
244 self
.DefaultValue
= ConvertNOTEQToNE(self
.DefaultValue
)
246 PcdEntry
= PcdObject()
247 PcdEntry
.SetSupArchList(self
.CommonDefines
.SupArchList
)
248 PcdEntry
.SetTokenSpaceGuidCName(self
.TokenSpaceGuidCName
)
249 PcdEntry
.SetCName(self
.CName
)
250 PcdEntry
.SetValidUsage(self
.PcdUsage
)
251 PcdEntry
.SetDefaultValue(self
.DefaultValue
)
252 PcdEntry
.SetFeatureFlag(ConvertNOTEQToNE(self
.CommonDefines
.FeatureFlag
))
253 PcdEntry
.SetItemType(self
.PcdItemType
)
255 PcdEntry
.SetHelpTextList(GetHelpTextList(self
.HelpText
))
256 PcdEntry
.SetPcdErrorsList(self
.PcdError
)
260 def ToXml(self
, PcdEntry
, Key
):
264 DefaultValue
= ConvertNEToNOTEQ(PcdEntry
.GetDefaultValue())
267 [['SupArchList', GetStringOfList(PcdEntry
.GetSupArchList())], \
268 ['PcdUsage', PcdEntry
.GetValidUsage()], \
269 ['PcdItemType', PcdEntry
.GetItemType()], \
270 ['FeatureFlag', PcdEntry
.GetFeatureFlag()],
272 NodeList
= [['TokenSpaceGuidCname', PcdEntry
.GetTokenSpaceGuidCName()],
273 ['TokenSpaceGuidValue', PcdEntry
.GetTokenSpaceGuidValue()],
274 ['Token', PcdEntry
.GetToken()],
275 ['CName', PcdEntry
.GetCName()],
276 ['DatumType', PcdEntry
.GetDatumType()],
277 ['ValidUsage', GetStringOfList(PcdEntry
.GetValidUsage())],
278 ['DefaultValue', DefaultValue
],
279 ['MaxDatumSize', PcdEntry
.GetMaxDatumSize()],
280 ['Offset', PcdEntry
.GetOffset()],
283 for Item
in PcdEntry
.GetHelpTextList():
285 NodeList
.append(Tmp
.ToXml(Item
))
286 for Item
in PcdEntry
.GetPcdErrorsList():
288 NodeList
.append(Tmp
.ToXml(Item
, 'PcdError'))
290 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
294 # Package will use ToXml2
296 def ToXml2(self
, PcdEntry
, Key
):
300 DefaultValue
= ConvertNEToNOTEQ(PcdEntry
.GetDefaultValue())
303 [['SupArchList', GetStringOfList(PcdEntry
.GetSupArchList())], \
304 ['SupModList', GetStringOfList(PcdEntry
.GetSupModuleList())]
306 NodeList
= [['TokenSpaceGuidCname', PcdEntry
.GetTokenSpaceGuidCName()],
307 ['Token', PcdEntry
.GetToken()],
308 ['CName', PcdEntry
.GetCName()],
309 ['DatumType', PcdEntry
.GetDatumType()],
310 ['ValidUsage', GetStringOfList(PcdEntry
.GetValidUsage())],
311 ['DefaultValue', DefaultValue
],
312 ['MaxDatumSize', PcdEntry
.GetMaxDatumSize()],
314 for Item
in PcdEntry
.GetHelpTextList():
316 NodeList
.append(Tmp
.ToXml(Item
))
318 for Item
in PcdEntry
.GetPcdErrorsList():
320 NodeList
.append(Tmp
.ToXml(Item
, 'PcdError'))
322 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
326 # Module will use ToXml3
328 def ToXml3(self
, PcdEntry
, Key
):
332 DefaultValue
= ConvertNEToNOTEQ(PcdEntry
.GetDefaultValue())
335 [['SupArchList', GetStringOfList(PcdEntry
.GetSupArchList())], \
336 ['PcdUsage', PcdEntry
.GetValidUsage()], \
337 ['PcdItemType', PcdEntry
.GetItemType()], \
338 ['FeatureFlag', ConvertNEToNOTEQ(PcdEntry
.GetFeatureFlag())],
340 NodeList
= [['CName', PcdEntry
.GetCName()],
341 ['TokenSpaceGuidCName', PcdEntry
.GetTokenSpaceGuidCName()],
342 ['DefaultValue', DefaultValue
],
345 for Item
in PcdEntry
.GetHelpTextList():
347 NodeList
.append(Tmp
.ToXml(Item
))
348 for Item
in PcdEntry
.GetPcdErrorsList():
350 NodeList
.append(Tmp
.ToXml(Item
, 'PcdError'))
352 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
357 # AsBuild Module will use ToXml4
359 def ToXml4(self
, PcdEntry
, Key
):
363 DefaultValue
= ConvertNEToNOTEQ(PcdEntry
.GetDefaultValue())
368 ['TokenSpaceGuidValue', PcdEntry
.GetTokenSpaceGuidValue()],
369 ['PcdCName', PcdEntry
.GetCName()],
370 ['Token', PcdEntry
.GetToken()],
371 ['DatumType', PcdEntry
.GetDatumType()],
372 ['MaxDatumSize', PcdEntry
.GetMaxDatumSize()],
373 ['Value', DefaultValue
],
374 ['Offset', PcdEntry
.GetOffset()]
377 for Item
in PcdEntry
.GetHelpTextList():
379 NodeList
.append(Tmp
.ToXml(Item
))
380 for Item
in PcdEntry
.GetPcdErrorsList():
382 NodeList
.append(Tmp
.ToXml(Item
, 'PcdError'))
384 Root
= CreateXmlElement('%s' % Key
, '', NodeList
, AttributeList
)
391 ('PcdItemType = %s PcdUsage = %s TokenSpaceGuidCName = %s \
392 TokenSpaceGuidValue = %s Token = %s CName = %s PcdCName = %s \
393 DatumType = %s ValidUsage = %s DefaultValue = %s MaxDatumSize = %s \
394 Value = %s Offset = %s %s') % \
395 (self
.PcdItemType
, self
.PcdUsage
, self
.TokenSpaceGuidCName
, \
396 self
.TokenSpaceGuidValue
, self
.Token
, self
.CName
, self
.PcdCName
, \
397 self
.DatumType
, self
.ValidUsage
, self
.DefaultValue
, \
398 self
.MaxDatumSize
, self
.Value
, self
.Offset
, self
.CommonDefines
)
399 for Item
in self
.HelpText
:
400 Str
= Str
+ "\n\t" + str(Item
)
401 for Item
in self
.PcdError
:
402 Str
= Str
+ "\n\tPcdError:" + str(Item
)