self._Version = 0\r
self._GuidDict = {} # for Parser PCD value {GUID(gTokeSpaceGuidName)}\r
\r
+ self._PcdCodeValue = ""\r
+ self._PcdDataTypeCODE = False\r
+ self._CurrentPcdName = ""\r
+\r
## Store the parsed data in table\r
def _Store(self, *Args):\r
return self._Table.Insert(*Args)\r
\r
return Macros\r
\r
+ def ProcessMultipleLineCODEValue(self,Content):\r
+ CODEBegin = False\r
+ CODELine = ""\r
+ continuelinecount = 0\r
+ newContent = []\r
+ for Index in range(0, len(Content)):\r
+ Line = Content[Index]\r
+ if CODEBegin:\r
+ CODELine = CODELine + Line\r
+ continuelinecount +=1\r
+ if ")}" in Line:\r
+ newContent.append(CODELine)\r
+ for _ in range(continuelinecount):\r
+ newContent.append("")\r
+ CODEBegin = False\r
+ CODELine = ""\r
+ continuelinecount = 0\r
+ else:\r
+ if not Line:\r
+ newContent.append(Line)\r
+ continue\r
+ if "{CODE(" not in Line:\r
+ newContent.append(Line)\r
+ continue\r
+ elif CODEPattern.findall(Line):\r
+ newContent.append(Line)\r
+ continue\r
+ else:\r
+ CODEBegin = True\r
+ CODELine = Line\r
+\r
+ return newContent\r
+\r
_SectionParser = {}\r
\r
## INF file parser class\r
#\r
self._IdMapping = {-1:-1}\r
\r
- self._PcdCodeValue = ""\r
- self._PcdDataTypeCODE = False\r
- self._CurrentPcdName = ""\r
self._Content = None\r
\r
## Parser starter\r
def _LibraryInstanceParser(self):\r
self._ValueList[0] = self._CurrentLine\r
\r
- def ProcessMultipleLineCODEValue(self,Content):\r
- CODEBegin = False\r
- CODELine = ""\r
- continuelinecount = 0\r
- newContent = []\r
- for Index in range(0, len(Content)):\r
- Line = Content[Index]\r
- if CODEBegin:\r
- CODELine = CODELine + Line\r
- continuelinecount +=1\r
- if ")}" in Line:\r
- newContent.append(CODELine)\r
- for _ in range(continuelinecount):\r
- newContent.append("")\r
- CODEBegin = False\r
- CODELine = ""\r
- continuelinecount = 0\r
- else:\r
- if not Line:\r
- newContent.append(Line)\r
- continue\r
- if "{CODE(" not in Line:\r
- newContent.append(Line)\r
- continue\r
- elif CODEPattern.findall(Line):\r
- newContent.append(Line)\r
- continue\r
- else:\r
- CODEBegin = True\r
- CODELine = Line\r
-\r
- return newContent\r
\r
def _DecodeCODEData(self):\r
pass\r
self._include_flag = False\r
self._package_flag = False\r
\r
+ self._RestofValue = ""\r
+\r
## Parser starter\r
def Start(self):\r
Content = ''\r
except:\r
EdkLogger.error("Parser", FILE_READ_FAILURE, ExtraData=self.MetaFile)\r
\r
+ Content = self.ProcessMultipleLineCODEValue(Content)\r
+\r
self._DefinesCount = 0\r
for Index in range(0, len(Content)):\r
Line, Comment = CleanString2(Content[Index])\r
#\r
@ParseMacro\r
def _PcdParser(self):\r
+\r
if self._CurrentStructurePcdName:\r
self._ValueList[0] = self._CurrentStructurePcdName\r
\r
self._ValueList[1] = TAB_SPLIT.join(PcdNames[2:])\r
self._ValueList[2] = PcdTockens[1]\r
if not self._CurrentStructurePcdName:\r
+ if self._PcdDataTypeCODE:\r
+ if ")}" in self._CurrentLine:\r
+ ValuePart,RestofValue = self._CurrentLine.split(")}")\r
+ self._PcdCodeValue = self._PcdCodeValue + "\n " + ValuePart\r
+ self._CurrentLine = "|".join((self._CurrentPcdName, self._PcdCodeValue,RestofValue))\r
+ self._PcdDataTypeCODE = False\r
+ self._PcdCodeValue = ""\r
+ else:\r
+ self._PcdCodeValue = self._PcdCodeValue + "\n " + self._CurrentLine\r
+ self._ValueList = None\r
+ return\r
TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT, 1)\r
+ self._CurrentPcdName = TokenList[0]\r
+ if len(TokenList) == 2 and TokenList[1].strip().startswith("{CODE"):\r
+ if ")}" in self._CurrentLine:\r
+ self._PcdDataTypeCODE = False\r
+ self._PcdCodeValue = ""\r
+ else:\r
+ self._PcdDataTypeCODE = True\r
+ self._PcdCodeValue = TokenList[1].strip()\r
+ self._ValueList = None\r
+ return\r
+\r
self._ValueList[0:1] = GetSplitValueList(TokenList[0], TAB_SPLIT)\r
ValueRe = re.compile(r'^[a-zA-Z_][a-zA-Z0-9_]*')\r
# check PCD information\r