## @file\r
# Collect all defined strings in multiple uni files.\r
#\r
-# Copyright (c) 2014 - 2018, 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
# 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
# @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
## 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
\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
# 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').readlines()\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
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,\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
else:\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path)\r
elif Line.startswith(u'"'):\r
- #\r
- # Check the situation that there has more than 2 '"' for the language entry\r
- #\r
- if 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
if u'#string' in Line or u'#language' in Line:\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path)\r
NewLines.append(Line)\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