##\r
# Import Modules\r
#\r
+from __future__ import absolute_import\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
+from .UniClassObject import StripComments\r
\r
IMAGE_TOKEN = re.compile('IMAGE_TOKEN *\(([A-Z0-9_]+) *\)', re.MULTILINE | re.UNICODE)\r
\r
\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
+ 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
- def LoadIdfFiles(self, FileList):\r
- if len(FileList) > 0:\r
- for File in FileList:\r
- self.LoadIdfFile(File)\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
- 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
+ ImageFileList = []\r
+ for Line in FileIn.splitlines():\r
+ Line = Line.strip()\r
+ Line = StripComments(Line)\r
+ if len(Line) == 0:\r
+ continue\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
+ 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
- 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
+ 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