## @file\r
-# This file is used to define class objects of INF file [Ppis] section. \r
-# It will consumed by InfParser. \r
+# This file is used to define class objects of INF file [Ppis] section.\r
+# It will consumed by InfParser.\r
#\r
-# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2018, 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
+# 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
\r
from Library.ParserValidate import IsValidCVariableName\r
from Library.CommentParsing import ParseComment\r
-from Library.ExpressionValidate import IsValidFeatureFlagExp \r
- \r
+from Library.ExpressionValidate import IsValidFeatureFlagExp\r
+\r
from Library.Misc import Sdict\r
-from Library import DataType as DT \r
+from Library import DataType as DT\r
import Logger.Log as Logger\r
from Logger import ToolError\r
from Logger import StringTable as ST\r
\r
def ParsePpiComment(CommentsList, InfPpiItemObj):\r
PreNotify = None\r
- PreUsage = None \r
+ PreUsage = None\r
PreHelpText = ''\r
BlockFlag = -1\r
CommentInsList = []\r
CommentItemNotify, \\r
CommentItemString, \\r
CommentItemHelpText = \\r
- ParseComment(CommentItem, \r
- DT.ALL_USAGE_TOKENS, \r
- DT.PPI_NOTIFY_TOKENS, \r
- ['PPI'], \r
+ ParseComment(CommentItem,\r
+ DT.ALL_USAGE_TOKENS,\r
+ DT.PPI_NOTIFY_TOKENS,\r
+ ['PPI'],\r
False)\r
- \r
+\r
#\r
- # To avoid PyLint error \r
+ # To avoid PyLint error\r
#\r
if CommentItemString:\r
pass\r
- \r
+\r
if CommentItemHelpText is None:\r
CommentItemHelpText = ''\r
if Count == len(CommentsList) and CommentItemUsage == CommentItemNotify == DT.ITEM_UNDEFINED:\r
- CommentItemHelpText = DT.END_OF_LINE \r
+ CommentItemHelpText = DT.END_OF_LINE\r
#\r
# For the Last comment Item, set BlockFlag.\r
#\r
else:\r
BlockFlag = 3\r
elif BlockFlag == -1:\r
- BlockFlag = 4 \r
- \r
+ BlockFlag = 4\r
+\r
#\r
# Comment USAGE and NOTIFY information are "UNDEFINED"\r
#\r
- if BlockFlag == -1 or BlockFlag == 1 or BlockFlag == 2: \r
+ if BlockFlag == -1 or BlockFlag == 1 or BlockFlag == 2:\r
if CommentItemUsage == CommentItemNotify == DT.ITEM_UNDEFINED:\r
if BlockFlag == -1:\r
BlockFlag = 1\r
BlockFlag = 3\r
#\r
# An item have Usage or Notify information and the first time get this information\r
- # \r
+ #\r
elif BlockFlag == -1:\r
BlockFlag = 4\r
- \r
+\r
#\r
# Combine two comment line if they are generic comment\r
- # \r
+ #\r
if CommentItemUsage == CommentItemNotify == PreUsage == PreNotify == DT.ITEM_UNDEFINED:\r
CommentItemHelpText = PreHelpText + DT.END_OF_LINE + CommentItemHelpText\r
#\r
# Store this information for next line may still need combine operation.\r
#\r
PreHelpText = CommentItemHelpText\r
- \r
- if BlockFlag == 4: \r
+\r
+ if BlockFlag == 4:\r
CommentItemIns = InfPpiItemCommentContent()\r
CommentItemIns.SetUsage(CommentItemUsage)\r
CommentItemIns.SetNotify(CommentItemNotify)\r
CommentItemIns.SetHelpStringItem(CommentItemHelpText)\r
CommentInsList.append(CommentItemIns)\r
- \r
+\r
BlockFlag = -1\r
PreUsage = None\r
PreNotify = None\r
PreHelpText = ''\r
- \r
+\r
elif BlockFlag == 3:\r
#\r
# Add previous help string\r
- # \r
+ #\r
CommentItemIns = InfPpiItemCommentContent()\r
CommentItemIns.SetUsage(DT.ITEM_UNDEFINED)\r
CommentItemIns.SetNotify(DT.ITEM_UNDEFINED)\r
if PreHelpText == '' or PreHelpText.endswith(DT.END_OF_LINE):\r
- PreHelpText += DT.END_OF_LINE \r
+ PreHelpText += DT.END_OF_LINE\r
CommentItemIns.SetHelpStringItem(PreHelpText)\r
CommentInsList.append(CommentItemIns)\r
#\r
CommentItemIns.SetNotify(CommentItemNotify)\r
CommentItemIns.SetHelpStringItem(CommentItemHelpText)\r
CommentInsList.append(CommentItemIns)\r
- \r
+\r
BlockFlag = -1\r
PreUsage = None\r
PreNotify = None\r
PreUsage = CommentItemUsage\r
PreNotify = CommentItemNotify\r
PreHelpText = CommentItemHelpText\r
- \r
+\r
InfPpiItemObj.SetCommentList(CommentInsList)\r
- \r
+\r
return InfPpiItemObj\r
\r
class InfPpiItemCommentContent():\r
def __init__(self):\r
#\r
- # ## SOMETIMES_CONSUMES ## HelpString \r
+ # ## SOMETIMES_CONSUMES ## HelpString\r
#\r
self.UsageItem = ''\r
#\r
self.HelpStringItem = ''\r
self.Notify = ''\r
self.CommentList = []\r
- \r
+\r
def SetUsage(self, UsageItem):\r
self.UsageItem = UsageItem\r
def GetUsage(self):\r
return self.UsageItem\r
- \r
+\r
def SetNotify(self, Notify):\r
if Notify != DT.ITEM_UNDEFINED:\r
self.Notify = 'true'\r
def GetNotify(self):\r
return self.Notify\r
- \r
+\r
def SetHelpStringItem(self, HelpStringItem):\r
self.HelpStringItem = HelpStringItem\r
def GetHelpStringItem(self):\r
return self.HelpStringItem\r
- \r
+\r
class InfPpiItem():\r
def __init__(self):\r
self.Name = ''\r
- self.FeatureFlagExp = '' \r
+ self.FeatureFlagExp = ''\r
self.SupArchList = []\r
self.CommentList = []\r
- \r
+\r
def SetName(self, Name):\r
self.Name = Name\r
def GetName(self):\r
def SetSupArchList(self, SupArchList):\r
self.SupArchList = SupArchList\r
def GetSupArchList(self):\r
- return self.SupArchList \r
+ return self.SupArchList\r
\r
def SetCommentList(self, CommentList):\r
self.CommentList = CommentList\r
# Macro defined in this section should be only used in this section.\r
#\r
self.Macros = {}\r
- \r
+\r
def SetPpi(self, PpiList, Arch = None):\r
__SupArchList = []\r
for ArchItem in Arch:\r
#\r
# Validate Arch\r
- # \r
+ #\r
if (ArchItem == '' or ArchItem is None):\r
- ArchItem = 'COMMON' \r
+ ArchItem = 'COMMON'\r
__SupArchList.append(ArchItem)\r
- \r
+\r
for Item in PpiList:\r
#\r
# Get Comment content of this protocol\r
CommentsList = Item[1]\r
CurrentLineOfItem = Item[2]\r
Item = Item[0]\r
- InfPpiItemObj = InfPpiItem() \r
+ InfPpiItemObj = InfPpiItem()\r
if len(Item) >= 1 and len(Item) <= 2:\r
#\r
# Only CName contained\r
#\r
if not IsValidCVariableName(Item[0]):\r
- Logger.Error("InfParser", \r
- ToolError.FORMAT_INVALID, \r
+ Logger.Error("InfParser",\r
+ ToolError.FORMAT_INVALID,\r
ST.ERR_INF_PARSER_INVALID_CNAME%(Item[0]),\r
- File=CurrentLineOfItem[2], \r
- Line=CurrentLineOfItem[1], \r
+ File=CurrentLineOfItem[2],\r
+ Line=CurrentLineOfItem[1],\r
ExtraData=CurrentLineOfItem[0])\r
if (Item[0] != ''):\r
InfPpiItemObj.SetName(Item[0])\r
else:\r
- Logger.Error("InfParser", \r
- ToolError.FORMAT_INVALID, \r
+ Logger.Error("InfParser",\r
+ ToolError.FORMAT_INVALID,\r
ST.ERR_INF_PARSER_CNAME_MISSING,\r
- File=CurrentLineOfItem[2], \r
- Line=CurrentLineOfItem[1], \r
+ File=CurrentLineOfItem[2],\r
+ Line=CurrentLineOfItem[1],\r
ExtraData=CurrentLineOfItem[0])\r
#\r
# Have FeatureFlag information\r
#\r
# Contained CName and Feature Flag Express\r
# <statements> ::= <CName> ["|" <FeatureFlagExpress>]\r
- # Item[1] should not be empty \r
+ # Item[1] should not be empty\r
#\r
if Item[1].strip() == '':\r
- Logger.Error("InfParser", \r
- ToolError.FORMAT_INVALID, \r
+ Logger.Error("InfParser",\r
+ ToolError.FORMAT_INVALID,\r
ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_MISSING,\r
- File=CurrentLineOfItem[2], \r
- Line=CurrentLineOfItem[1], \r
+ File=CurrentLineOfItem[2],\r
+ Line=CurrentLineOfItem[1],\r
ExtraData=CurrentLineOfItem[0])\r
#\r
# Validate Feature Flag Express for PPI entry\r
#\r
FeatureFlagRtv = IsValidFeatureFlagExp(Item[1].strip())\r
if not FeatureFlagRtv[0]:\r
- Logger.Error("InfParser", \r
+ Logger.Error("InfParser",\r
ToolError.FORMAT_INVALID,\r
ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_SYNTAX_INVLID%(FeatureFlagRtv[1]),\r
- File=CurrentLineOfItem[2], \r
- Line=CurrentLineOfItem[1], \r
+ File=CurrentLineOfItem[2],\r
+ Line=CurrentLineOfItem[1],\r
ExtraData=CurrentLineOfItem[0])\r
InfPpiItemObj.SetFeatureFlagExp(Item[1])\r
if len(Item) != 1 and len(Item) != 2:\r
#\r
- # Invalid format of Ppi statement \r
+ # Invalid format of Ppi statement\r
#\r
- Logger.Error("InfParser", \r
+ Logger.Error("InfParser",\r
ToolError.FORMAT_INVALID,\r
ST.ERR_INF_PARSER_GUID_PPI_PROTOCOL_SECTION_CONTENT_ERROR,\r
- File=CurrentLineOfItem[2], \r
- Line=CurrentLineOfItem[1], \r
+ File=CurrentLineOfItem[2],\r
+ Line=CurrentLineOfItem[1],\r
ExtraData=CurrentLineOfItem[0])\r
- \r
+\r
#\r
# Get/Set Usage and HelpString for PPI entry\r
#\r
CommentItemIns.SetUsage(DT.ITEM_UNDEFINED)\r
CommentItemIns.SetNotify(DT.ITEM_UNDEFINED)\r
InfPpiItemObj.SetCommentList([CommentItemIns])\r
- \r
+\r
InfPpiItemObj.SetSupArchList(__SupArchList)\r
\r
#\r
# Determine PPI name duplicate. Follow below rule:\r
#\r
- # A PPI must not be duplicated within a [Ppis] section. \r
- # A PPI may appear in multiple architectural [Ppis] \r
- # sections. A PPI listed in an architectural [Ppis] \r
- # section must not be listed in the common architectural \r
+ # A PPI must not be duplicated within a [Ppis] section.\r
+ # A PPI may appear in multiple architectural [Ppis]\r
+ # sections. A PPI listed in an architectural [Ppis]\r
+ # section must not be listed in the common architectural\r
# [Ppis] section.\r
- # \r
+ #\r
# NOTE: This check will not report error now.\r
- # \r
+ #\r
for Item in self.Ppis:\r
if Item.GetName() == InfPpiItemObj.GetName():\r
ItemSupArchList = Item.GetSupArchList()\r
if ItemArch.upper() == 'COMMON' or PpiItemObjArch.upper() == 'COMMON':\r
#\r
# ST.ERR_INF_PARSER_ITEM_DUPLICATE_COMMON\r
- # \r
+ #\r
pass\r
- \r
- if self.Ppis.has_key((InfPpiItemObj)): \r
+\r
+ if (InfPpiItemObj) in self.Ppis:\r
PpiList = self.Ppis[InfPpiItemObj]\r
PpiList.append(InfPpiItemObj)\r
self.Ppis[InfPpiItemObj] = PpiList\r
PpiList = []\r
PpiList.append(InfPpiItemObj)\r
self.Ppis[InfPpiItemObj] = PpiList\r
- \r
- return True \r
- \r
- \r
+\r
+ return True\r
+\r
+\r
def GetPpi(self):\r
- return self.Ppis
\ No newline at end of file
+ return self.Ppis\r