1. Support the lower case string token name in compatible mode.
authorlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Thu, 22 Oct 2009 01:32:40 +0000 (01:32 +0000)
committerlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Thu, 22 Oct 2009 01:32:40 +0000 (01:32 +0000)
2. Check whether string token name contains the invalid lower case character in native mode.

git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1726 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/AutoGen/StrGather.py
Source/Python/AutoGen/UniClassObject.py

index a7f38b8..903ac3c 100644 (file)
@@ -62,6 +62,7 @@ OFFSET = 'offset'
 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
@@ -476,10 +477,11 @@ def GetFileList(SourceFileList, IncludeList, SkipList):
 #\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
@@ -487,7 +489,10 @@ def SearchString(UniObjectClass, FileList):
         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
@@ -518,7 +523,7 @@ def GetStringFiles(UniFilList, SourceFileList, IncludeList, SkipList, BaseName,
 \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
index 412fa72..dcfa264 100644 (file)
@@ -234,6 +234,11 @@ class UniFileClassObject(object):
         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
@@ -365,6 +370,11 @@ class UniFileClassObject(object):
                         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