]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/IdfClassObject.py
BaseTools: Replace StringIO.StringIO with io.BytesIO
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / IdfClassObject.py
index a028aceee927af6d2a4edf040e44d96864817351..b656bd83e3ba27b2dd959d81a49e183ac65e8c6b 100644 (file)
 # Import Modules\r
 #\r
 import Common.EdkLogger as EdkLogger\r
-import StringIO\r
 from Common.BuildToolError import *\r
-from Common.String import GetLineNo\r
+from Common.StringUtils import GetLineNo\r
 from Common.Misc import PathClass\r
 from Common.LongFilePathSupport import LongFilePath\r
 import re\r
 import os\r
 from Common.GlobalData import gIdentifierPattern\r
+from UniClassObject import StripComments\r
 \r
 IMAGE_TOKEN = re.compile('IMAGE_TOKEN *\(([A-Z0-9_]+) *\)', re.MULTILINE | re.UNICODE)\r
 \r
@@ -65,77 +65,51 @@ EFI_HII_PACKAGE_TYPE_SYSTEM_END    = 0xFF
 \r
 class IdfFileClassObject(object):\r
     def __init__(self, FileList = []):\r
-        self.FileList = FileList\r
         self.ImageFilesDict = {}\r
         self.ImageIDList = []\r
-        if len(self.FileList) > 0:\r
-            self.LoadIdfFiles(FileList)\r
-\r
-    def LoadIdfFiles(self, FileList):\r
-        if len(FileList) > 0:\r
-            for File in FileList:\r
-                self.LoadIdfFile(File)\r
-\r
-    def LoadIdfFile(self, File = None):\r
-        if File is None:\r
-            EdkLogger.error("Image Definition File Parser", PARSER_ERROR, 'No Image definition file is given.')\r
-        self.File = File\r
-\r
-        try:\r
-            IdfFile = open(LongFilePath(File.Path), mode='r')\r
-            FileIn = IdfFile.read()\r
-            IdfFile.close()\r
-        except:\r
-            EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData=File)\r
-\r
-        ImageFileList = []\r
-        for Line in FileIn.splitlines():\r
-            Line = Line.strip()\r
-            Line = self.StripComments(Line)\r
-            if len(Line) == 0:\r
-                continue\r
-\r
-            LineNo = GetLineNo(FileIn, Line, False)\r
-            if not Line.startswith('#image '):\r
-                EdkLogger.error("Image Definition File Parser", PARSER_ERROR, 'The %s in Line %s of File %s is invalid.' % (Line, LineNo, File.Path))\r
-\r
-            if Line.find('#image ') >= 0:\r
-                LineDetails = Line.split()\r
-                Len = len(LineDetails)\r
-                if Len != 3 and Len != 4:\r
-                    EdkLogger.error("Image Definition File Parser", PARSER_ERROR, 'The format is not match #image IMAGE_ID [TRANSPARENT] ImageFileName in Line %s of File %s.' % (LineNo, File.Path))\r
-                if Len == 4 and LineDetails[2] != 'TRANSPARENT':\r
-                    EdkLogger.error("Image Definition File Parser", PARSER_ERROR, 'Please use the keyword "TRANSPARENT" to describe the transparency setting in Line %s of File %s.' % (LineNo, File.Path))\r
-                MatchString = gIdentifierPattern.match(LineDetails[1])\r
-                if MatchString is None or MatchString.end(0) != len(LineDetails[1]):\r
-                    EdkLogger.error('Image Definition  File Parser', FORMAT_INVALID, 'The Image token name %s defined in Idf file %s contains the invalid character.' % (LineDetails[1], File.Path))\r
-                if LineDetails[1] not in self.ImageIDList:\r
-                    self.ImageIDList.append(LineDetails[1])\r
-                else:\r
-                    EdkLogger.error("Image Definition File Parser", PARSER_ERROR, 'The %s in Line %s of File %s is already defined.' % (LineDetails[1], LineNo, File.Path))\r
-                if Len == 4:\r
-                    ImageFile = ImageFileObject(LineDetails[Len-1], LineDetails[1], True)\r
-                else:\r
-                    ImageFile = ImageFileObject(LineDetails[Len-1], LineDetails[1], False)\r
-                ImageFileList.append(ImageFile)\r
-        if ImageFileList:\r
-            self.ImageFilesDict[File] = ImageFileList\r
-\r
-    def StripComments(self, Line):\r
-        Comment = '//'\r
-        CommentPos = Line.find(Comment)\r
-        while CommentPos >= 0:\r
-        # if there are non matched quotes before the comment header\r
-        # then we are in the middle of a string\r
-        # but we need to ignore the escaped quotes and backslashes.\r
-            if ((Line.count('"', 0, CommentPos) - Line.count('\\"', 0, CommentPos)) & 1) == 1:\r
-                CommentPos = Line.find (Comment, CommentPos + 1)\r
-            else:\r
-                return Line[:CommentPos].strip()\r
-        return Line.strip()\r
-\r
-    def ImageDecoder(self, File):\r
-        pass\r
+        for File in FileList:\r
+            if File is None:\r
+                EdkLogger.error("Image Definition File Parser", PARSER_ERROR, 'No Image definition file is given.')\r
+\r
+            try:\r
+                IdfFile = open(LongFilePath(File.Path), mode='r')\r
+                FileIn = IdfFile.read()\r
+                IdfFile.close()\r
+            except:\r
+                EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData=File)\r
+\r
+            ImageFileList = []\r
+            for Line in FileIn.splitlines():\r
+                Line = Line.strip()\r
+                Line = StripComments(Line)\r
+                if len(Line) == 0:\r
+                    continue\r
+\r
+                LineNo = GetLineNo(FileIn, Line, False)\r
+                if not Line.startswith('#image '):\r
+                    EdkLogger.error("Image Definition File Parser", PARSER_ERROR, 'The %s in Line %s of File %s is invalid.' % (Line, LineNo, File.Path))\r
+\r
+                if Line.find('#image ') >= 0:\r
+                    LineDetails = Line.split()\r
+                    Len = len(LineDetails)\r
+                    if Len != 3 and Len != 4:\r
+                        EdkLogger.error("Image Definition File Parser", PARSER_ERROR, 'The format is not match #image IMAGE_ID [TRANSPARENT] ImageFileName in Line %s of File %s.' % (LineNo, File.Path))\r
+                    if Len == 4 and LineDetails[2] != 'TRANSPARENT':\r
+                        EdkLogger.error("Image Definition File Parser", PARSER_ERROR, 'Please use the keyword "TRANSPARENT" to describe the transparency setting in Line %s of File %s.' % (LineNo, File.Path))\r
+                    MatchString = gIdentifierPattern.match(LineDetails[1])\r
+                    if MatchString is None:\r
+                        EdkLogger.error('Image Definition  File Parser', FORMAT_INVALID, 'The Image token name %s defined in Idf file %s contains the invalid character.' % (LineDetails[1], File.Path))\r
+                    if LineDetails[1] not in self.ImageIDList:\r
+                        self.ImageIDList.append(LineDetails[1])\r
+                    else:\r
+                        EdkLogger.error("Image Definition File Parser", PARSER_ERROR, 'The %s in Line %s of File %s is already defined.' % (LineDetails[1], LineNo, File.Path))\r
+                    if Len == 4:\r
+                        ImageFile = ImageFileObject(LineDetails[Len-1], LineDetails[1], True)\r
+                    else:\r
+                        ImageFile = ImageFileObject(LineDetails[Len-1], LineDetails[1], False)\r
+                    ImageFileList.append(ImageFile)\r
+            if ImageFileList:\r
+                self.ImageFilesDict[File] = ImageFileList\r
 \r
 def SearchImageID(ImageFileObject, FileList):\r
     if FileList == []:\r