]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/MetaFileParser.py
BaseTools: Enable CODE format in DEC file
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / MetaFileParser.py
index b2428a535c6d432cb7dcd897863a8826639fe8e6..311d0faf383ba2ea7b04af1038b4415e41a2cd50 100644 (file)
@@ -192,6 +192,10 @@ class MetaFileParser(object):
         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
@@ -483,6 +487,39 @@ class MetaFileParser(object):
 \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
@@ -907,9 +944,6 @@ class DscParser(MetaFileParser):
         #\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
@@ -1140,38 +1174,6 @@ class DscParser(MetaFileParser):
     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
@@ -1778,6 +1780,8 @@ class DecParser(MetaFileParser):
         self._include_flag = False\r
         self._package_flag = False\r
 \r
+        self._RestofValue = ""\r
+\r
     ## Parser starter\r
     def Start(self):\r
         Content = ''\r
@@ -1786,6 +1790,8 @@ class DecParser(MetaFileParser):
         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
@@ -1983,6 +1989,7 @@ class DecParser(MetaFileParser):
     #\r
     @ParseMacro\r
     def _PcdParser(self):\r
+\r
         if self._CurrentStructurePcdName:\r
             self._ValueList[0] = self._CurrentStructurePcdName\r
 \r
@@ -2028,7 +2035,29 @@ class DecParser(MetaFileParser):
                     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