# This file is used to parse a strings file and create or add to a string database \r
# file.\r
#\r
-# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
# which accompanies this distribution. The full text of the license may be found at\r
from Common.BuildToolError import *\r
from UniClassObject import *\r
from StringIO import StringIO\r
-from struct import pack\r
+from struct import pack, unpack\r
from Common.LongFilePathSupport import OpenLongFilePath as open\r
\r
##\r
COMMENT_NOT_REFERENCED = ' ' + COMMENT + NOT_REFERENCED\r
CHAR_ARRAY_DEFIN = 'unsigned char'\r
COMMON_FILE_NAME = 'Strings'\r
-OFFSET = 'offset'\r
-STRING = 'string'\r
-TO = 'to'\r
STRING_TOKEN = re.compile('STRING_TOKEN *\(([A-Z0-9_]+) *\)', re.MULTILINE | re.UNICODE)\r
-COMPATIBLE_STRING_TOKEN = re.compile('STRING_TOKEN *\(([A-Z0-9_]+) *\)', re.MULTILINE | re.UNICODE)\r
\r
EFI_HII_ARRAY_SIZE_LENGTH = 4\r
EFI_HII_PACKAGE_HEADER_LENGTH = 4\r
# @retval: The formatted hex string\r
#\r
def DecToHexStr(Dec, Digit = 8):\r
- return eval("'0x%0" + str(Digit) + "X' % int(Dec)")\r
+ return '0x{0:0{1}X}'.format(Dec, Digit)\r
\r
## Convert a dec number to a hex list\r
#\r
# @retval: A list for formatted hex string\r
#\r
def DecToHexList(Dec, Digit = 8):\r
- Hex = eval("'%0" + str(Digit) + "X' % int(Dec)")\r
- List = []\r
- for Bit in range(Digit - 2, -1, -2):\r
- List.append(HexHeader + Hex[Bit:Bit + 2])\r
- return List\r
+ Hex = '{0:0{1}X}'.format(Dec, Digit)\r
+ return ["0x" + Hex[Bit:Bit + 2] for Bit in range(Digit - 2, -1, -2)]\r
\r
## Convert a acsii string to a hex list\r
#\r
# @retval: A list for formatted hex string\r
#\r
def AscToHexList(Ascii):\r
- List = []\r
- for Item in Ascii:\r
- List.append('0x%2X' % ord(Item))\r
-\r
- return List\r
-\r
-## Create header of .h file\r
-#\r
-# Create a header of .h file\r
-#\r
-# @param BaseName: The basename of strings\r
-#\r
-# @retval Str: A string for .h file header\r
-#\r
-def CreateHFileHeader(BaseName):\r
- Str = ''\r
- for Item in H_C_FILE_HEADER:\r
- Str = WriteLine(Str, Item)\r
- Str = WriteLine(Str, '#ifndef _' + BaseName.upper() + '_STRINGS_DEFINE_H_')\r
- Str = WriteLine(Str, '#define _' + BaseName.upper() + '_STRINGS_DEFINE_H_')\r
- return Str\r
+ return ['0x{0:02X}'.format(ord(Item)) for Item in Ascii]\r
\r
## Create content of .h file\r
#\r
Name = StringItem.StringName\r
Token = StringItem.Token\r
Referenced = StringItem.Referenced\r
- if Name != None:\r
+ if Name is not None:\r
Line = ''\r
if Referenced == True:\r
if (ValueStartPtr - len(DEFINE_STR + Name)) <= 0:\r
\r
return HFile\r
\r
-## Create header of .c file\r
-#\r
-# Create a header of .c file\r
-#\r
-# @retval Str: A string for .c file header\r
-#\r
-def CreateCFileHeader():\r
- Str = ''\r
- for Item in H_C_FILE_HEADER:\r
- Str = WriteLine(Str, Item)\r
-\r
- return Str\r
-\r
## Create a buffer to store all items in an array\r
#\r
# @param BinBuffer Buffer to contain Binary data.\r
# first check for exact match\r
if Language in UniLanguageList:\r
if Language not in UniLanguageListFiltered:\r
- UniLanguageListFiltered += [Language]\r
+ UniLanguageListFiltered.append(Language)\r
# find the first one with the same/equivalent primary tag\r
else:\r
if Language.find('-') != -1:\r
\r
if PrimaryTag == UniLanguagePrimaryTag:\r
if UniLanguage not in UniLanguageListFiltered:\r
- UniLanguageListFiltered += [UniLanguage]\r
+ UniLanguageListFiltered.append(UniLanguage)\r
break\r
else:\r
# Here is rule 3 for "get best language"\r
for UniLanguage in UniLanguageList:\r
if UniLanguage.startswith('en-') or UniLanguage.startswith('eng-'):\r
if UniLanguage not in UniLanguageListFiltered:\r
- UniLanguageListFiltered += [UniLanguage]\r
+ UniLanguageListFiltered.append(UniLanguage)\r
break\r
else:\r
- UniLanguageListFiltered += [DefaultTag]\r
+ UniLanguageListFiltered.append(DefaultTag)\r
return UniLanguageListFiltered\r
\r
\r
#\r
def CreateCFile(BaseName, UniObjectClass, IsCompatibleMode, FilterInfo):\r
CFile = ''\r
- #CFile = WriteLine(CFile, CreateCFileHeader())\r
CFile = WriteLine(CFile, CreateCFileContent(BaseName, UniObjectClass, IsCompatibleMode, None, FilterInfo))\r
CFile = WriteLine(CFile, CreateCFileEnd())\r
return CFile\r
# @retval FileList: A list of all files found\r
#\r
def GetFileList(SourceFileList, IncludeList, SkipList):\r
- if IncludeList == None:\r
+ if IncludeList is None:\r
EdkLogger.error("UnicodeStringGather", AUTOGEN_ERROR, "Include path for unicode file is not defined")\r
\r
FileList = []\r
- if SkipList == None:\r
+ if SkipList is None:\r
SkipList = []\r
\r
for File in SourceFileList:\r
if os.path.isfile(File):\r
Lines = open(File, 'r')\r
for Line in Lines:\r
- if not IsCompatibleMode:\r
- StringTokenList = STRING_TOKEN.findall(Line)\r
- else:\r
- StringTokenList = COMPATIBLE_STRING_TOKEN.findall(Line)\r
- for StrName in StringTokenList:\r
+ for StrName in STRING_TOKEN.findall(Line):\r
EdkLogger.debug(EdkLogger.DEBUG_5, "Found string identifier: " + StrName)\r
UniObjectClass.SetStringReferenced(StrName)\r
\r