From: "Feng, Bob C" <bob.c.feng@intel.com>
To: edk2-devel@lists.01.org
Cc: Bob Feng <bob.c.feng@intel.com>, Liming Gao <liming.gao@intel.com>
Subject: [Patch 2/3] BaseTools: Implement splitquoted function in UPT
Date: Sun, 3 Feb 2019 13:55:14 +0800 [thread overview]
Message-ID: <20190203055515.18336-3-bob.c.feng@intel.com> (raw)
In-Reply-To: <20190203055515.18336-1-bob.c.feng@intel.com>
On some Linux environment, there may be no distutils.util
library for python3 that will cause UPT crash.
This patch implement distutils.util.split_quoted
in BaseTools so that the UPT tool will be independent with
distutils.util library.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
---
BaseTools/Source/Python/UPT/Library/UniClassObject.py | 47 ++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 44 insertions(+), 3 deletions(-)
diff --git a/BaseTools/Source/Python/UPT/Library/UniClassObject.py b/BaseTools/Source/Python/UPT/Library/UniClassObject.py
index bd7804b753..79aa252507 100644
--- a/BaseTools/Source/Python/UPT/Library/UniClassObject.py
+++ b/BaseTools/Source/Python/UPT/Library/UniClassObject.py
@@ -18,11 +18,10 @@ from __future__ import print_function
##
# Import Modules
#
import os, codecs, re
-import distutils.util
from Logger import ToolError
from Logger import Log as EdkLogger
from Logger import StringTable as ST
from Library.StringUtils import GetLineNo
from Library.Misc import PathClass
@@ -36,11 +35,11 @@ from Library.ParserValidate import CheckUTF16FileHeader
UNICODE_WIDE_CHAR = u'\\wide'
UNICODE_NARROW_CHAR = u'\\narrow'
UNICODE_NON_BREAKING_CHAR = u'\\nbr'
UNICODE_UNICODE_CR = '\r'
UNICODE_UNICODE_LF = '\n'
-
+WHITESPACE = ' \t\n\r\v\f'
NARROW_CHAR = u'\uFFF0'
WIDE_CHAR = u'\uFFF1'
NON_BREAKING_CHAR = u'\uFFF2'
CR = u'\u000D'
LF = u'\u000A'
@@ -296,11 +295,53 @@ class StringDefClassObject(object):
self.StringValue = self.StringValue + '\r\n' + Value
else:
self.StringValue = Value
self.StringValueByteList = UniToHexList(self.StringValue)
self.Length = len(self.StringValueByteList)
+#
+# This function implement distutils.util.split_quoted in another way.
+#
+def splitquoted(s):
+ words = []
+ word = []
+ InQuoted = False
+ escaped = False
+ CurrentQ = ""
+ s = s.strip()
+ for ch in s:
+ if escaped:
+ # preserve whatever is escaped;
+ # This char will become part of the current word
+ word.append(ch)
+ escaped = False
+ continue
+ if ch in WHITESPACE and not InQuoted:
+ # unescaped, unquoted whitespace: now
+ # we definitely have a word delimiter
+ if "".join(word):
+ words.append("".join(word))
+ word = []
+ continue
+ elif ch == "\\":
+ escaped = True
+ if not InQuoted:
+ continue
+ else:
+ # handle singly-quoted string or doubly-quoted string
+ if ch =='"' or ch == "'":
+ if not InQuoted:
+ InQuoted = True
+ CurrentQ = ch
+ continue
+ elif ch == CurrentQ:
+ InQuoted = False
+ continue
+ word.append(ch)
+ if word:
+ words.append("".join(word))
+ return words
## UniFileClassObject
#
# A structure for .uni file definition
#
class UniFileClassObject(object):
@@ -324,11 +365,11 @@ class UniFileClassObject(object):
#
# Get Language definition
#
def GetLangDef(self, File, Line):
- Lang = distutils.util.split_quoted((Line.split(u"//")[0]))
+ Lang = splitquoted((Line.split(u"//")[0]))
if len(Lang) != 3:
try:
FileIn = codecs.open(File.Path, mode='rb', encoding='utf_8').readlines()
except UnicodeError as Xstr:
FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16').readlines()
--
2.20.1.windows.1
next prev parent reply other threads:[~2019-02-03 5:55 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-03 5:55 [Patch 0/3] BaseTools: Implement splitquoted function Feng, Bob C
2019-02-03 5:55 ` [Patch 1/3] BaseTools: Implement splitquoted function in Build tool Feng, Bob C
2019-02-04 15:38 ` Carsey, Jaben
2019-02-03 5:55 ` Feng, Bob C [this message]
2019-02-03 5:55 ` [Patch 3/3] BaseTools: unit test for splitquoted function Feng, Bob C
2019-02-04 19:12 ` [Patch 0/3] BaseTools: Implement " Laszlo Ersek
2019-02-12 12:23 ` Laszlo Ersek
2019-02-12 13:33 ` Gao, Liming
2019-02-12 14:02 ` Laszlo Ersek
2019-02-12 17:16 ` Philippe Mathieu-Daudé
2019-02-12 17:24 ` Laszlo Ersek
2019-02-14 2:51 ` Feng, Bob C
2019-02-14 3:23 ` Gao, Liming
2019-02-14 15:35 ` Laszlo Ersek
2019-02-15 14:35 ` Gao, Liming
2019-02-15 21:54 ` Laszlo Ersek
2019-02-14 15:32 ` Laszlo Ersek
2019-02-15 3:19 ` Feng, Bob C
2019-02-12 10:44 ` Gao, Liming
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190203055515.18336-3-bob.c.feng@intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox