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-Za-z0-9_]+) *\)', re.MULTILINE | re.UNICODE)\r
\r
EFI_HII_ARRAY_SIZE_LENGTH = 4\r
EFI_HII_PACKAGE_HEADER_LENGTH = 4\r
#\r
# @param UniObjectClass: Input UniObjectClass\r
# @param FileList: Search path list\r
+# @param IsCompatibleMode Compatible Mode\r
#\r
# @retval UniObjectClass: UniObjectClass after searched\r
#\r
-def SearchString(UniObjectClass, FileList):\r
+def SearchString(UniObjectClass, FileList, IsCompatibleMode):\r
if FileList == []:\r
return UniObjectClass\r
\r
if os.path.isfile(File):\r
Lines = open(File, 'r')\r
for Line in Lines:\r
- StringTokenList = STRING_TOKEN.findall(Line)\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
EdkLogger.debug(EdkLogger.DEBUG_5, "Found string identifier: " + StrName)\r
UniObjectClass.SetStringReferenced(StrName)\r
\r
FileList = GetFileList(SourceFileList, IncludeList, SkipList)\r
\r
- Uni = SearchString(Uni, FileList)\r
+ Uni = SearchString(Uni, FileList, IsCompatibleMode)\r
\r
HFile = CreateHFile(BaseName, Uni, IsCompatibleMode, UniGenCFlag)\r
CFile = None\r
Value = ''\r
\r
Name = Item.split()[1]\r
+ # Check the string name is the upper character\r
+ if not self.IsCompatibleMode and 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', FORMAT_INVALID, 'The string token name %s defined in UNI file %s contains the invalid lower case character.' %(Name, self.File))\r
LanguageList = Item.split(u'#language ')\r
for IndexI in range(len(LanguageList)):\r
if IndexI == 0:\r
break\r
# Value = Value.replace(u'\r\n', u'')\r
Language = GetLanguageCode(Language, self.IsCompatibleMode, self.File)\r
+ # Check the string name is the upper character\r
+ if not self.IsCompatibleMode and 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', FORMAT_INVALID, 'The string token name %s defined in UNI file %s contains the invalid lower case character.' %(Name, self.File))\r
self.AddStringToList(Name, Language, Value)\r
continue\r
\r