## @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 - 2019, 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
-# distribution. The full text of the license may be found at \r
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
#\r
"""\r
Collect all defined strings in multiple uni files\r
"""\r
+from __future__ import print_function\r
\r
##\r
# Import Modules\r
#\r
import os, codecs, re\r
-import distutils.util\r
+import shlex\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
# @retval NewUni: The converted unicode string\r
#\r
def ConvertSpecialUnicodes(Uni):\r
- NewUni = Uni\r
+ OldUni = NewUni = Uni\r
NewUni = NewUni.replace(u'\u00A9', '(c)')\r
NewUni = NewUni.replace(u'\u00AE', '(r)')\r
NewUni = NewUni.replace(u'\u2122', '(tm)')\r
+ if OldUni == NewUni:\r
+ NewUni = OldUni\r
return NewUni\r
\r
## GetLanguageCode1766\r
#\r
# Check the language code read from .UNI file and convert RFC 4646 codes to RFC 1766 codes\r
-# RFC 1766 language codes supported in compatiblity mode\r
+# RFC 1766 language codes supported in compatibility mode\r
# RFC 4646 language codes supported in native mode\r
#\r
# @param LangName: Language codes read from .UNI file\r
#\r
-# @retval LangName: Valid lanugage code in RFC 1766 format or None\r
+# @retval LangName: Valid language code in RFC 1766 format or None\r
#\r
def GetLanguageCode1766(LangName, File=None):\r
return LangName\r
if LangName.isalpha() and gLANG_CONV_TABLE.get(LangName.lower()):\r
return LangName\r
else:\r
- EdkLogger.Error("Unicode File Parser", \r
+ EdkLogger.Error("Unicode File Parser",\r
ToolError.FORMAT_INVALID,\r
- "Invalid RFC 1766 language code : %s" % LangName, \r
+ "Invalid RFC 1766 language code : %s" % LangName,\r
File)\r
elif length == 5:\r
if LangName[0:2].isalpha() and LangName[2] == '-':\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
\r
- EdkLogger.Error("Unicode File Parser", \r
+ EdkLogger.Error("Unicode File Parser",\r
ToolError.FORMAT_INVALID,\r
- "Invalid RFC 4646 language code : %s" % LangName, \r
+ "Invalid RFC 4646 language code : %s" % LangName,\r
File)\r
- \r
+\r
## GetLanguageCode\r
#\r
# Check the language code read from .UNI file and convert RFC 1766 codes to RFC 4646 codes if appropriate\r
-# RFC 1766 language codes supported in compatiblity mode\r
+# RFC 1766 language codes supported in compatibility mode\r
# RFC 4646 language codes supported in native mode\r
#\r
# @param LangName: Language codes read from .UNI file\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
- EdkLogger.Error("Unicode File Parser", \r
+ EdkLogger.Error("Unicode File Parser",\r
ToolError.FORMAT_INVALID,\r
- "Invalid RFC 1766 language code : %s" % LangName, \r
+ "Invalid RFC 1766 language code : %s" % LangName,\r
File)\r
if (LangName[0] == 'X' or LangName[0] == 'x') and LangName[1] == '-':\r
return LangName\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
+ EdkLogger.Error("Unicode File Parser",\r
ToolError.FORMAT_INVALID,\r
- "Invalid RFC 4646 language code : %s" % LangName, \r
+ "Invalid RFC 4646 language code : %s" % LangName,\r
File)\r
\r
## FormatUniEntry\r
#\r
-# Formated the entry in Uni file.\r
+# Formatted the entry in Uni file.\r
#\r
# @param StrTokenName StrTokenName.\r
# @param TokenValueList A list need to be processed.\r
# @param ContainerFile ContainerFile.\r
#\r
-# @return formated entry\r
+# @return formatted entry\r
def FormatUniEntry(StrTokenName, TokenValueList, ContainerFile):\r
SubContent = ''\r
PreFormatLength = 40\r
if len(StrTokenName) > PreFormatLength:\r
PreFormatLength = len(StrTokenName) + 1\r
- for (Lang, Value) in TokenValueList: \r
+ for (Lang, Value) in TokenValueList:\r
if not Value or Lang == DT.TAB_LANGUAGE_EN_X:\r
continue\r
if Lang == '':\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
# Get Language definition\r
#\r
def GetLangDef(self, File, Line):\r
- Lang = distutils.util.split_quoted((Line.split(u"//")[0]))\r
+ Lang = shlex.split(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
+ EdkLogger.Error("Unicode File Parser",\r
+ ToolError.FILE_OPEN_FAILURE,\r
"File read failure: %s" % str(Xstr),\r
ExtraData=File)\r
LineNo = GetLineNo(FileIn, Line, False)\r
- EdkLogger.Error("Unicode File Parser", \r
+ EdkLogger.Error("Unicode File Parser",\r
ToolError.PARSER_ERROR,\r
- "Wrong language definition", \r
- ExtraData="""%s\n\t*Correct format is like '#langdef en-US "English"'""" % Line, \r
+ "Wrong language definition",\r
+ ExtraData="""%s\n\t*Correct format is like '#langdef en-US "English"'""" % Line,\r
File = File, Line = LineNo)\r
else:\r
LangName = GetLanguageCode(Lang[1], self.IsCompatibleMode, self.File)\r
if not IsLangInDef:\r
#\r
# The found STRING tokens will be added into new language string list\r
- # so that the unique STRING identifier is reserved for all languages in the package list. \r
+ # so that the unique STRING identifier is reserved for all languages in the package list.\r
#\r
FirstLangName = self.LanguageDef[0][0]\r
if LangName != FirstLangName:\r
OtherLang = Item.UseOtherLangDef\r
else:\r
OtherLang = FirstLangName\r
- self.OrderedStringList[LangName].append (StringDefClassObject(Item.StringName, \r
- '', \r
- Item.Referenced, \r
- Item.Token, \r
+ self.OrderedStringList[LangName].append (StringDefClassObject(Item.StringName,\r
+ '',\r
+ Item.Referenced,\r
+ Item.Token,\r
OtherLang))\r
self.OrderedStringDict[LangName][Item.StringName] = len(self.OrderedStringList[LangName]) - 1\r
return True\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
- EdkLogger.Error("Unicode File Parser", \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
LanguageList = Item.split(u'#language ')\r
Language = LanguageList[IndexI].split()[0]\r
#.replace(u'\r\n', u'')\r
Value = \\r
- LanguageList[IndexI][LanguageList[IndexI].find(u'\"') + len(u'\"') : LanguageList[IndexI].rfind(u'\"')] \r
+ LanguageList[IndexI][LanguageList[IndexI].find(u'\"') + len(u'\"') : LanguageList[IndexI].rfind(u'\"')]\r
Language = GetLanguageCode(Language, self.IsCompatibleMode, self.File)\r
self.AddStringToList(Name, Language, Value)\r
\r
#\r
def PreProcess(self, File, IsIncludeFile=False):\r
if not os.path.exists(File.Path) or not os.path.isfile(File.Path):\r
- EdkLogger.Error("Unicode File Parser", \r
+ EdkLogger.Error("Unicode File Parser",\r
ToolError.FILE_NOT_FOUND,\r
ExtraData=File.Path)\r
\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
except:\r
EdkLogger.Error("Unicode File Parser", ToolError.FILE_OPEN_FAILURE, ExtraData=File.Path)\r
- \r
- \r
+\r
+\r
#\r
# get the file header\r
#\r
if Line.startswith(DT.TAB_COMMENT_EDK1_SPLIT) and HeaderStart and not HeaderEnd and FirstGenHeader:\r
self.UniFileHeader += Line + '\r\n'\r
continue\r
- \r
+\r
#\r
# Use unique identifier\r
#\r
MultiLineFeedExits = False\r
#\r
# 0: initial value\r
- # 1: signle String entry exist\r
- # 2: line feed exist under the some signle String entry\r
+ # 1: single String entry exist\r
+ # 2: line feed exist under the some single String entry\r
#\r
StringEntryExistsFlag = 0\r
for Line in FileIn:\r
Line = Line.strip()\r
#\r
# Ignore comment line and empty line\r
- # \r
+ #\r
if Line == u'' or Line.startswith(u'//'):\r
#\r
# Change the single line String entry flag status\r
StringEntryExistsFlag = 2\r
#\r
# If the '#string' line and the '#language' line are not in the same line,\r
- # there should be only one line feed character betwwen them\r
+ # there should be only one line feed character between them\r
#\r
if MultiLineFeedExits:\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path)\r
\r
MultiLineFeedExits = False\r
#\r
- # Process comment embeded in string define lines\r
+ # Process comment embedded in string define lines\r
#\r
FindFlag = Line.find(u'//')\r
if FindFlag != -1 and Line.find(u'//') < Line.find(u'"'):\r
FileIn[LineCount-1] = Line\r
FileIn[LineCount] = '\r\n'\r
LineCount -= 1\r
- for Index in xrange (LineCount + 1, len (FileIn) - 1):\r
+ for Index in range (LineCount + 1, len (FileIn) - 1):\r
if (Index == len(FileIn) -1):\r
FileIn[Index] = '\r\n'\r
else:\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path)\r
else:\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path)\r
- \r
+\r
Line = Line.replace(UNICODE_WIDE_CHAR, WIDE_CHAR)\r
Line = Line.replace(UNICODE_NARROW_CHAR, NARROW_CHAR)\r
Line = Line.replace(UNICODE_NON_BREAKING_CHAR, NON_BREAKING_CHAR)\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
if Line.startswith(u'#string') and Line.find(u'#language') == -1:\r
MultiLineFeedExits = True\r
- \r
+\r
if Line.startswith(u'#string') and Line.find(u'#language') > 0 and Line.find(u'"') < 0:\r
MultiLineFeedExits = True\r
- \r
+\r
#\r
# Between Language entry and String entry can not contain line feed\r
#\r
if Line.startswith(u'#language') and len(Line.split()) == 2:\r
MultiLineFeedExits = True\r
- \r
+\r
+ #\r
+ # Check the situation that there only has one '"' for the language entry\r
+ #\r
+ if Line.startswith(u'#string') and Line.find(u'#language') > 0 and Line.count(u'"') == 1:\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
+ # Check the situation that there has more than 2 '"' for the language entry\r
+ #\r
+ if Line.startswith(u'#string') and Line.find(u'#language') > 0 and Line.replace(u'\\"', '').count(u'"') > 2:\r
+ EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,\r
+ ExtraData='''The line %s has more than 2 '"' for language entry in file %s'''\r
+ % (LineCount, File.Path))\r
+\r
#\r
# Between two String entry, can not contain line feed\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
ExtraData='''The line %s misses '"' at the end of it in file %s'''\r
% (LineCount, File.Path))\r
+\r
+ #\r
+ # Check the situation that there has more than 2 '"' for the language entry\r
+ #\r
+ if Line.strip() and Line.replace(u'\\"', '').count(u'"') > 2:\r
+ EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,\r
+ ExtraData='''The line %s has more than 2 '"' for language entry in file %s'''\r
+ % (LineCount, File.Path))\r
+\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
StringEntryExistsFlag = 0\r
\r
Lines.append(Line)\r
- \r
+\r
#\r
# Convert string def format as below\r
#\r
# "Mi segunda secuencia 1"\r
# "Mi segunda secuencia 2"\r
#\r
- \r
+\r
if not IsIncludeFile and not Lines:\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \\r
Message=ST.ERR_UNIPARSE_NO_SECTION_EXIST, \\r
- ExtraData=File.Path) \r
+ ExtraData=File.Path)\r
\r
NewLines = []\r
StrName = u''\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \\r
Message=ST.ERR_UNIPARSE_STRNAME_FORMAT_ERROR % StrName.split()[1], \\r
ExtraData=File.Path)\r
- \r
+\r
if StrName and len(StrName.split()[1].split(DT.TAB_UNDERLINE_SPLIT)) == 4:\r
StringTokenList = StrName.split()[1].split(DT.TAB_UNDERLINE_SPLIT)\r
if (StringTokenList[3].upper() in [DT.TAB_STR_TOKENPROMPT, DT.TAB_STR_TOKENHELP] and \\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \\r
Message=ST.ERR_UNIPARSE_STRTOKEN_FORMAT_ERROR % StrName.split()[1], \\r
ExtraData=File.Path)\r
- \r
+\r
if Line.count(u'#language') > 1:\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \\r
Message=ST.ERR_UNIPARSE_SEP_LANGENTRY_LINE % Line, \\r
- ExtraData=File.Path) \r
- \r
+ ExtraData=File.Path)\r
+\r
if Line.startswith(u'//'):\r
continue\r
elif Line.startswith(u'#langdef'):\r
if len(Line.split()) == 2:\r
NewLines.append(Line)\r
continue\r
- elif len(Line.split()) > 2 and Line.find(u'"') > 0: \r
+ elif len(Line.split()) > 2 and Line.find(u'"') > 0:\r
NewLines.append(Line[:Line.find(u'"')].strip())\r
NewLines.append(Line[Line.find(u'"'):])\r
else:\r
if Line[Line.find(u'#language')-1] != ' ' or \\r
Line[Line.find(u'#language')+len(u'#language')] != u' ':\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path)\r
- \r
+\r
if Line.find(u'"') > 0:\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path)\r
- \r
+\r
StrName = Line.split()[0] + u' ' + Line.split()[1]\r
if StrName:\r
if StrName.split()[1] not in ExistStrNameList:\r
if Line[Line.find(u'#language')-1] != u' ' or \\r
Line[Line.find(u'#language')+len(u'#language')] != u' ':\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path)\r
- \r
+\r
if Line[Line.find(u'"')-1] != u' ':\r
- EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path) \r
- \r
- StrName = Line.split()[0] + u' ' + Line.split()[1] \r
+ EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path)\r
+\r
+ StrName = Line.split()[0] + u' ' + Line.split()[1]\r
if StrName:\r
if StrName.split()[1] not in ExistStrNameList:\r
ExistStrNameList.append(StrName.split()[1].strip())\r
DT.TAB_DEC_BINARY_ABSTRACT, DT.TAB_DEC_BINARY_DESCRIPTION]:\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \\r
Message=ST.ERR_UNIPARSE_MULTI_ENTRY_EXIST % StrName.split()[1], \\r
- ExtraData=File.Path) \r
+ ExtraData=File.Path)\r
if IsIncludeFile:\r
if StrName not in NewLines:\r
NewLines.append((Line[:Line.find(u'#language')]).strip())\r
- else: \r
+ else:\r
NewLines.append((Line[:Line.find(u'#language')]).strip())\r
NewLines.append((Line[Line.find(u'#language'):Line.find(u'"')]).strip())\r
NewLines.append((Line[Line.find(u'"'):]).strip())\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
+\r
if StrName and not StrName.split()[1].startswith(u'STR_'):\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \\r
Message=ST.ERR_UNIPARSE_STRNAME_FORMAT_ERROR % StrName.split()[1], \\r
- ExtraData=File.Path) \r
- \r
+ ExtraData=File.Path)\r
+\r
if StrName and not NewLines:\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \\r
Message=ST.ERR_UNI_MISS_LANGENTRY % StrName, \\r
ExtraData=File.Path)\r
- \r
+\r
#\r
# Check Abstract, Description, BinaryAbstract and BinaryDescription order,\r
- # should be Abstract, Description, BinaryAbstract, BinaryDesctiption\r
+ # should be Abstract, Description, BinaryAbstract, BinaryDescription\r
AbstractPosition = -1\r
DescriptionPosition = -1\r
BinaryAbstractPosition = -1\r
BinaryDescriptionPosition = ExistStrNameList.index(StrName)\r
else:\r
DescriptionPosition = ExistStrNameList.index(StrName)\r
- \r
+\r
OrderList = sorted([AbstractPosition, DescriptionPosition])\r
BinaryOrderList = sorted([BinaryAbstractPosition, BinaryDescriptionPosition])\r
Min = OrderList[0]\r
BinaryMax > Max):\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \\r
Message=ST.ERR_UNIPARSE_ENTRY_ORDER_WRONG, \\r
- ExtraData=File.Path) \r
+ ExtraData=File.Path)\r
elif BinaryAbstractPosition > -1:\r
if not(BinaryAbstractPosition > Max):\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \\r
Message=ST.ERR_UNIPARSE_ENTRY_ORDER_WRONG, \\r
- ExtraData=File.Path) \r
- \r
+ ExtraData=File.Path)\r
+\r
if DescriptionPosition > -1:\r
if not(DescriptionPosition == Max and AbstractPosition == Min and \\r
DescriptionPosition > AbstractPosition):\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \\r
Message=ST.ERR_UNIPARSE_ENTRY_ORDER_WRONG, \\r
- ExtraData=File.Path) \r
- \r
+ ExtraData=File.Path)\r
+\r
if not self.UniFileHeader:\r
- EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \r
+ EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,\r
Message = ST.ERR_NO_SOURCE_HEADER,\r
ExtraData=File.Path)\r
- \r
+\r
return NewLines\r
\r
#\r
# Load a .uni file\r
#\r
def LoadUniFile(self, File = None):\r
- if File == None:\r
- EdkLogger.Error("Unicode File Parser", \r
- ToolError.PARSER_ERROR, \r
- Message='No unicode file is given', \r
+ if File is None:\r
+ EdkLogger.Error("Unicode File Parser",\r
+ ToolError.PARSER_ERROR,\r
+ Message='No unicode file is given',\r
ExtraData=File.Path)\r
- \r
+\r
self.File = File\r
- \r
+\r
#\r
# Process special char in file\r
#\r
SecondLine.find(u'#string ') < 0 and SecondLine.find(u'#language ') >= 0 and \\r
ThirdLine.find(u'#string ') < 0 and ThirdLine.find(u'#language ') < 0:\r
if Line.find('"') > 0 or SecondLine.find('"') > 0:\r
- EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \r
+ EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,\r
Message=ST.ERR_UNIPARSE_DBLQUOTE_UNMATCHED,\r
ExtraData=File.Path)\r
- \r
+\r
Name = Line[Line.find(u'#string ') + len(u'#string ') : ].strip(' ')\r
Language = SecondLine[SecondLine.find(u'#language ') + len(u'#language ') : ].strip(' ')\r
for IndexJ in range(IndexI + 2, len(Lines)):\r
for LangNameItem in self.LanguageDef:\r
if Language == LangNameItem[0]:\r
break\r
- \r
+\r
if Language not in self.OrderedStringList:\r
self.OrderedStringList[Language] = []\r
self.OrderedStringDict[Language] = {}\r
- \r
+\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
- Item.UseOtherLangDef = '' \r
+ Item.UseOtherLangDef = ''\r
\r
if IsAdded:\r
Token = len(self.OrderedStringList[Language])\r
if Index == -1:\r
- self.OrderedStringList[Language].append(StringDefClassObject(Name, \r
- Value, \r
- Referenced, \r
- Token, \r
+ self.OrderedStringList[Language].append(StringDefClassObject(Name,\r
+ Value,\r
+ Referenced,\r
+ Token,\r
UseOtherLangDef))\r
self.OrderedStringDict[Language][Name] = Token\r
for LangName in self.LanguageDef:\r
#\r
# New STRING token will be added into all language string lists.\r
- # so that the unique STRING identifier is reserved for all languages in the package list. \r
+ # so that the unique STRING identifier is reserved for all languages in the package list.\r
#\r
if LangName[0] != Language:\r
if UseOtherLangDef != '':\r
OtherLangDef = UseOtherLangDef\r
else:\r
OtherLangDef = Language\r
- self.OrderedStringList[LangName[0]].append(StringDefClassObject(Name, \r
- '', \r
- Referenced, \r
- Token, \r
+ self.OrderedStringList[LangName[0]].append(StringDefClassObject(Name,\r
+ '',\r
+ Referenced,\r
+ Token,\r
OtherLangDef))\r
self.OrderedStringDict[LangName[0]][Name] = len(self.OrderedStringList[LangName[0]]) - 1\r
else:\r
- self.OrderedStringList[Language].insert(Index, StringDefClassObject(Name, \r
- Value, \r
- Referenced, \r
- Token, \r
+ self.OrderedStringList[Language].insert(Index, StringDefClassObject(Name,\r
+ Value,\r
+ Referenced,\r
+ Token,\r
UseOtherLangDef))\r
self.OrderedStringDict[Language][Name] = Index\r
\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
- \r
+ print(str(Member))\r
+\r
#\r
- # Read content from '!include' UNI file \r
+ # Read content from '!include' UNI file\r
#\r
def ReadIncludeUNIfile(self, FilaPath):\r
if self.File:\r
pass\r
- \r
+\r
if not os.path.exists(FilaPath) or not os.path.isfile(FilaPath):\r
- EdkLogger.Error("Unicode File Parser", \r
+ EdkLogger.Error("Unicode File Parser",\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