+def SplitPcdValueString(String):\r
+ # There might be escaped comma in GUID() or DEVICE_PATH() or " "\r
+ # or ' ' or L' ' or L" "\r
+ RetList = []\r
+ InParenthesis = 0\r
+ InSingleQuote = False\r
+ InDoubleQuote = False\r
+ Item = ''\r
+ for i, ch in enumerate(String):\r
+ if ch == '(':\r
+ InParenthesis += 1\r
+ if ch == ')':\r
+ if InParenthesis:\r
+ InParenthesis -= 1\r
+ else:\r
+ raise BadExpression(ERR_STRING_TOKEN % Item)\r
+ if ch == '"' and not InSingleQuote:\r
+ if String[i-1] != '\\':\r
+ InDoubleQuote = not InDoubleQuote\r
+ if ch == "'" and not InDoubleQuote:\r
+ if String[i-1] != '\\':\r
+ InSingleQuote = not InSingleQuote\r
+ if ch == ',':\r
+ if InParenthesis or InSingleQuote or InDoubleQuote:\r
+ Item += String[i]\r
+ continue\r
+ elif Item:\r
+ RetList.append(Item)\r
+ Item = ''\r
+ continue\r
+ Item += String[i]\r
+ if InSingleQuote or InDoubleQuote or InParenthesis:\r
+ raise BadExpression(ERR_STRING_TOKEN % Item)\r
+ if Item:\r
+ RetList.append(Item)\r
+ return RetList\r
+\r
+def IsValidCName(Str):\r
+ return True if __ValidString.match(Str) else False\r
+\r
+def BuildOptionValue(PcdValue, GuidDict):\r
+ IsArray = False\r
+ if PcdValue.startswith('H'):\r
+ InputValue = PcdValue[1:]\r
+ elif PcdValue.startswith("L'") or PcdValue.startswith("'"):\r
+ InputValue = PcdValue\r
+ elif PcdValue.startswith('L'):\r
+ InputValue = 'L"' + PcdValue[1:] + '"'\r
+ else:\r
+ InputValue = PcdValue\r
+ if IsFieldValueAnArray(InputValue):\r
+ IsArray = True\r
+ if IsArray:\r
+ try:\r
+ PcdValue = ValueExpressionEx(InputValue, 'VOID*', GuidDict)(True)\r
+ except:\r
+ pass\r
+ return PcdValue\r
+\r