## @file\r
# Collect all defined strings in multiple uni files.\r
#\r
-# Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>\r
#\r
# This program and the accompanying materials are licensed and made available \r
# under the terms and conditions of the BSD License which accompanies this \r
"""\r
Collect all defined strings in multiple uni files\r
"""\r
+from __future__ import print_function\r
\r
##\r
# Import Modules\r
from Logger import ToolError\r
from Logger import Log as EdkLogger\r
from Logger import StringTable as ST\r
-from Library.String import GetLineNo\r
+from Library.StringUtils import GetLineNo\r
from Library.Misc import PathClass\r
from Library.Misc import GetCharIndexOutStr\r
from Library import DataType as DT\r
TAB = u'\t'\r
BACK_SPLASH = u'\\'\r
\r
-gINCLUDE_PATTERN = re.compile("^!include[\s]+([\S]+)[\s]*$", re.MULTILINE | re.UNICODE)\r
-\r
gLANG_CONV_TABLE = {'eng':'en', 'fra':'fr', \\r
'aar':'aa', 'abk':'ab', 'ave':'ae', 'afr':'af', 'aka':'ak', 'amh':'am', \\r
'arg':'an', 'ara':'ar', 'asm':'as', 'ava':'av', 'aym':'ay', 'aze':'az', \\r
for Key in gLANG_CONV_TABLE.keys():\r
if gLANG_CONV_TABLE.get(Key) == LangName[0:2].lower():\r
return Key\r
- if LangName[0:3].isalpha() and gLANG_CONV_TABLE.get(LangName.lower()) == None and LangName[3] == '-':\r
+ if LangName[0:3].isalpha() and gLANG_CONV_TABLE.get(LangName.lower()) is None and LangName[3] == '-':\r
for Key in gLANG_CONV_TABLE.keys():\r
if Key == LangName[0:3].lower():\r
return Key\r
if IsCompatibleMode:\r
if length == 3 and LangName.isalpha():\r
TempLangName = gLANG_CONV_TABLE.get(LangName.lower())\r
- if TempLangName != None:\r
+ if TempLangName is not None:\r
return TempLangName\r
return LangName\r
else:\r
if LangName.isalpha():\r
return LangName\r
elif length == 3:\r
- if LangName.isalpha() and gLANG_CONV_TABLE.get(LangName.lower()) == None:\r
+ if LangName.isalpha() and gLANG_CONV_TABLE.get(LangName.lower()) is None:\r
return LangName\r
elif length == 5:\r
if LangName[0:2].isalpha() and LangName[2] == '-':\r
elif length >= 6:\r
if LangName[0:2].isalpha() and LangName[2] == '-':\r
return LangName\r
- if LangName[0:3].isalpha() and gLANG_CONV_TABLE.get(LangName.lower()) == None and LangName[3] == '-':\r
+ if LangName[0:3].isalpha() and gLANG_CONV_TABLE.get(LangName.lower()) is None and LangName[3] == '-':\r
return LangName\r
\r
EdkLogger.Error("Unicode File Parser", \r
self.UseOtherLangDef = UseOtherLangDef\r
self.Length = 0\r
\r
- if Name != None:\r
+ if Name is not None:\r
self.StringName = Name\r
self.StringNameByteList = UniToHexList(Name)\r
- if Value != None:\r
+ if Value is not None:\r
self.StringValue = Value\r
self.StringValueByteList = UniToHexList(self.StringValue)\r
self.Length = len(self.StringValueByteList)\r
- if Token != None:\r
+ if Token is not None:\r
self.Token = Token\r
\r
def __str__(self):\r
repr(self.UseOtherLangDef)\r
\r
def UpdateValue(self, Value = None):\r
- if Value != None:\r
+ if Value is not None:\r
if self.StringValue:\r
self.StringValue = self.StringValue + '\r\n' + Value\r
else:\r
Lang = distutils.util.split_quoted((Line.split(u"//")[0]))\r
if len(Lang) != 3:\r
try:\r
- FileIn = codecs.open(File.Path, mode='rb', encoding='utf_8').read()\r
- except UnicodeError, Xstr:\r
- FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16').read()\r
- except UnicodeError, Xstr:\r
- FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16_le').read()\r
+ FileIn = codecs.open(File.Path, mode='rb', encoding='utf_8').readlines()\r
+ except UnicodeError as Xstr:\r
+ FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16').readlines()\r
+ except UnicodeError as Xstr:\r
+ FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16_le').readlines()\r
except:\r
EdkLogger.Error("Unicode File Parser", \r
ToolError.FILE_OPEN_FAILURE, \r
# Check the string name is the upper character\r
if Name != '':\r
MatchString = re.match('[A-Z0-9_]+', Name, re.UNICODE)\r
- if MatchString == None or MatchString.end(0) != len(Name):\r
+ if MatchString is None or MatchString.end(0) != len(Name):\r
EdkLogger.Error("Unicode File Parser", \r
ToolError.FORMAT_INVALID,\r
'The string token name %s in UNI file %s must be upper case character.' %(Name, self.File))\r
# ExtraData='The file %s is either invalid UTF-16LE or it is missing the BOM.' % File.Path)\r
\r
try:\r
- FileIn = codecs.open(File.Path, mode='rb', encoding='utf_8').read()\r
- except UnicodeError, Xstr:\r
+ FileIn = codecs.open(File.Path, mode='rb', encoding='utf_8').readlines()\r
+ except UnicodeError as Xstr:\r
FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16').readlines()\r
except UnicodeError:\r
FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16_le').readlines()\r
Line = Line.replace(u'\t', u' ')\r
Line = Line.replace(u'\u0006', u'\\')\r
\r
- # IncList = gINCLUDE_PATTERN.findall(Line)\r
- IncList = []\r
- if len(IncList) == 1:\r
- for Dir in [File.Dir] + self.IncludePathList:\r
- IncFile = PathClass(str(IncList[0]), Dir)\r
- self.IncFileList.append(IncFile)\r
- if os.path.isfile(IncFile.Path):\r
- Lines.extend(self.PreProcess(IncFile, True))\r
- break\r
- else:\r
- EdkLogger.Error("Unicode File Parser", \r
- ToolError.FILE_NOT_FOUND, \r
- Message="Cannot find include file", \r
- ExtraData=str(IncList[0]))\r
- continue\r
- \r
+ #\r
+ # Check if single line has correct '"'\r
+ #\r
+ if Line.startswith(u'#string') and Line.find(u'#language') > -1 and Line.find('"') > Line.find(u'#language'):\r
+ if not Line.endswith('"'):\r
+ EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,\r
+ ExtraData='''The line %s misses '"' at the end of it in file %s'''\r
+ % (LineCount, File.Path))\r
+\r
#\r
# Between Name entry and Language entry can not contain line feed\r
#\r
#\r
if Line.startswith(u'"'):\r
if StringEntryExistsFlag == 2:\r
- EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \r
+ EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,\r
Message=ST.ERR_UNIPARSE_LINEFEED_UP_EXIST % Line, ExtraData=File.Path)\r
- \r
+\r
StringEntryExistsFlag = 1\r
if not Line.endswith('"'):\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,\r
% (LineCount, File.Path))\r
elif Line.startswith(u'#language'):\r
if StringEntryExistsFlag == 2:\r
- EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \r
+ EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,\r
Message=ST.ERR_UNI_MISS_STRING_ENTRY % Line, ExtraData=File.Path)\r
StringEntryExistsFlag = 0\r
else:\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path)\r
NewLines.append(Line)\r
else:\r
- print Line\r
+ print(Line)\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path)\r
\r
if StrName and not StrName.split()[1].startswith(u'STR_'):\r
# Load a .uni file\r
#\r
def LoadUniFile(self, File = None):\r
- if File == None:\r
+ if File is None:\r
EdkLogger.Error("Unicode File Parser", \r
ToolError.PARSER_ERROR, \r
Message='No unicode file is given', \r
IsAdded = True\r
if Name in self.OrderedStringDict[Language]:\r
IsAdded = False\r
- if Value != None:\r
+ if Value is not None:\r
ItemIndexInList = self.OrderedStringDict[Language][Name]\r
Item = self.OrderedStringList[Language][ItemIndexInList]\r
Item.UpdateValue(Value)\r
# Show the instance itself\r
#\r
def ShowMe(self):\r
- print self.LanguageDef\r
+ print(self.LanguageDef)\r
#print self.OrderedStringList\r
for Item in self.OrderedStringList:\r
- print Item\r
+ print(Item)\r
for Member in self.OrderedStringList[Item]:\r
- print str(Member)\r
+ print(str(Member))\r
\r
#\r
# Read content from '!include' UNI file \r
ToolError.FILE_NOT_FOUND,\r
ExtraData=FilaPath)\r
try:\r
- FileIn = codecs.open(FilaPath, mode='rb', encoding='utf_8').read()\r
- except UnicodeError, Xstr:\r
+ FileIn = codecs.open(FilaPath, mode='rb', encoding='utf_8').readlines()\r
+ except UnicodeError as Xstr:\r
FileIn = codecs.open(FilaPath, mode='rb', encoding='utf_16').readlines()\r
except UnicodeError:\r
FileIn = codecs.open(FilaPath, mode='rb', encoding='utf_16_le').readlines()\r