]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/Library/CommentGenerating.py
BaseTools/UPT:merge UPT Tool use Python2 and Python3
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Library / CommentGenerating.py
CommitLineData
4234283c
LG
1## @file\r
2# This file is used to define comment generating interface\r
3#\r
64285f15 4# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>\r
4234283c 5#\r
f7496d71
LG
6# This program and the accompanying materials are licensed and made available\r
7# under the terms and conditions of the BSD License which accompanies this\r
8# distribution. The full text of the license may be found at\r
4234283c
LG
9# http://opensource.org/licenses/bsd-license.php\r
10#\r
11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13#\r
14\r
15'''\r
16CommentGenerating\r
17'''\r
18\r
19##\r
20# Import Modules\r
21#\r
64285f15 22from Library.StringUtils import GetSplitValueList\r
4234283c
LG
23from Library.DataType import TAB_SPACE_SPLIT\r
24from Library.DataType import TAB_INF_GUIDTYPE_VAR\r
25from Library.DataType import USAGE_ITEM_NOTIFY\r
26from Library.DataType import ITEM_UNDEFINED\r
421ccda3
HC
27from Library.DataType import TAB_HEADER_COMMENT\r
28from Library.DataType import TAB_BINARY_HEADER_COMMENT\r
29from Library.DataType import TAB_COMMENT_SPLIT\r
30from Library.DataType import TAB_SPECIAL_COMMENT\r
31from Library.DataType import END_OF_LINE\r
32from Library.DataType import TAB_COMMENT_EDK1_SPLIT\r
33from Library.DataType import TAB_COMMENT_EDK1_START\r
34from Library.DataType import TAB_COMMENT_EDK1_END\r
35from Library.DataType import TAB_STAR\r
36from Library.DataType import TAB_PCD_PROMPT\r
37from Library.UniClassObject import ConvertSpecialUnicodes\r
38from Library.Misc import GetLocalValue\r
4234283c
LG
39## GenTailCommentLines\r
40#\r
41# @param TailCommentLines: the tail comment lines that need to be generated\r
f7496d71 42# @param LeadingSpaceNum: the number of leading space needed for non-first\r
4234283c 43# line tail comment\r
f7496d71 44#\r
4234283c 45def GenTailCommentLines (TailCommentLines, LeadingSpaceNum = 0):\r
421ccda3
HC
46 TailCommentLines = TailCommentLines.rstrip(END_OF_LINE)\r
47 CommentStr = TAB_SPACE_SPLIT*2 + TAB_SPECIAL_COMMENT + TAB_SPACE_SPLIT + \\r
48 (END_OF_LINE + LeadingSpaceNum * TAB_SPACE_SPLIT + TAB_SPACE_SPLIT*2 + TAB_SPECIAL_COMMENT + \\r
49 TAB_SPACE_SPLIT).join(GetSplitValueList(TailCommentLines, END_OF_LINE))\r
f7496d71 50\r
4234283c
LG
51 return CommentStr\r
52\r
53## GenGenericComment\r
54#\r
55# @param CommentLines: Generic comment Text, maybe Multiple Lines\r
f7496d71 56#\r
4234283c
LG
57def GenGenericComment (CommentLines):\r
58 if not CommentLines:\r
59 return ''\r
421ccda3
HC
60 CommentLines = CommentLines.rstrip(END_OF_LINE)\r
61 CommentStr = TAB_SPECIAL_COMMENT + TAB_SPACE_SPLIT + (END_OF_LINE + TAB_COMMENT_SPLIT + TAB_SPACE_SPLIT).join\\r
62 (GetSplitValueList(CommentLines, END_OF_LINE)) + END_OF_LINE\r
4234283c
LG
63 return CommentStr\r
64\r
65## GenGenericCommentF\r
66#\r
67# similar to GenGenericComment but will remove <EOL> at end of comment once,\r
68# and for line with only <EOL>, '#\n' will be generated instead of '# \n'\r
69#\r
70# @param CommentLines: Generic comment Text, maybe Multiple Lines\r
f7496d71
LG
71# @return CommentStr: Generated comment line\r
72#\r
421ccda3 73def GenGenericCommentF (CommentLines, NumOfPound=1, IsPrompt=False, IsInfLibraryClass=False):\r
4234283c
LG
74 if not CommentLines:\r
75 return ''\r
4234283c
LG
76 #\r
77 # if comment end with '\n', then remove it to prevent one extra line\r
78 # generate later on\r
79 #\r
421ccda3 80 if CommentLines.endswith(END_OF_LINE):\r
4234283c 81 CommentLines = CommentLines[:-1]\r
4234283c 82 CommentStr = ''\r
421ccda3
HC
83 if IsPrompt:\r
84 CommentStr += TAB_COMMENT_SPLIT * NumOfPound + TAB_SPACE_SPLIT + TAB_PCD_PROMPT + TAB_SPACE_SPLIT + \\r
85 CommentLines.replace(END_OF_LINE, '') + END_OF_LINE\r
86 else:\r
87 CommentLineList = GetSplitValueList(CommentLines, END_OF_LINE)\r
88 FindLibraryClass = False\r
89 for Line in CommentLineList:\r
90 # If this comment is for @libraryclass and it has multiple lines\r
91 # make sure the second lines align to the first line after @libraryclass as below\r
92 #\r
93 # ## @libraryclass XYZ FIRST_LINE\r
94 # ## ABC SECOND_LINE\r
95 #\r
96 if IsInfLibraryClass and Line.find(u'@libraryclass ') > -1:\r
97 FindLibraryClass = True\r
98 if Line == '':\r
99 CommentStr += TAB_COMMENT_SPLIT * NumOfPound + END_OF_LINE\r
100 else:\r
101 if FindLibraryClass and Line.find(u'@libraryclass ') > -1:\r
102 CommentStr += TAB_COMMENT_SPLIT * NumOfPound + TAB_SPACE_SPLIT + Line + END_OF_LINE\r
103 elif FindLibraryClass:\r
104 CommentStr += TAB_COMMENT_SPLIT * NumOfPound + TAB_SPACE_SPLIT * 16 + Line + END_OF_LINE\r
105 else:\r
106 CommentStr += TAB_COMMENT_SPLIT * NumOfPound + TAB_SPACE_SPLIT + Line + END_OF_LINE\r
f7496d71 107\r
4234283c
LG
108 return CommentStr\r
109\r
110\r
111## GenHeaderCommentSection\r
112#\r
113# Generate Header comment sections\r
114#\r
f7496d71 115# @param Abstract One line of abstract\r
4234283c
LG
116# @param Description multiple lines of Description\r
117# @param Copyright possible multiple copyright lines\r
118# @param License possible multiple license lines\r
119#\r
421ccda3
HC
120def GenHeaderCommentSection(Abstract, Description, Copyright, License, IsBinaryHeader=False, \\r
121 CommChar=TAB_COMMENT_SPLIT):\r
4234283c 122 Content = ''\r
421ccda3
HC
123\r
124 #\r
125 # Convert special character to (c), (r) and (tm).\r
126 #\r
174a9d3c
ZF
127 Abstract = ConvertSpecialUnicodes(Abstract)\r
128 Description = ConvertSpecialUnicodes(Description)\r
421ccda3 129 if IsBinaryHeader:\r
1ccc4d89 130 Content += CommChar * 2 + TAB_SPACE_SPLIT + TAB_BINARY_HEADER_COMMENT + '\r\n'\r
421ccda3
HC
131 elif CommChar == TAB_COMMENT_EDK1_SPLIT:\r
132 Content += CommChar + TAB_SPACE_SPLIT + TAB_COMMENT_EDK1_START + TAB_STAR + TAB_SPACE_SPLIT +\\r
1ccc4d89 133 TAB_HEADER_COMMENT + '\r\n'\r
421ccda3 134 else:\r
1ccc4d89 135 Content += CommChar * 2 + TAB_SPACE_SPLIT + TAB_HEADER_COMMENT + '\r\n'\r
4234283c 136 if Abstract:\r
1ccc4d89
LG
137 Abstract = Abstract.rstrip('\r\n')\r
138 Content += CommChar + TAB_SPACE_SPLIT + ('\r\n' + CommChar + TAB_SPACE_SPLIT).join(GetSplitValueList\\r
cf2b2bde 139 (Abstract, '\n'))\r
1ccc4d89 140 Content += '\r\n' + CommChar + '\r\n'\r
4234283c 141 else:\r
1ccc4d89 142 Content += CommChar + '\r\n'\r
4234283c
LG
143\r
144 if Description:\r
1ccc4d89
LG
145 Description = Description.rstrip('\r\n')\r
146 Content += CommChar + TAB_SPACE_SPLIT + ('\r\n' + CommChar + TAB_SPACE_SPLIT).join(GetSplitValueList\\r
cf2b2bde 147 (Description, '\n'))\r
1ccc4d89 148 Content += '\r\n' + CommChar + '\r\n'\r
f7496d71 149\r
4234283c 150 #\r
f7496d71 151 # There is no '#\n' line to separate multiple copyright lines in code base\r
4234283c
LG
152 #\r
153 if Copyright:\r
1ccc4d89
LG
154 Copyright = Copyright.rstrip('\r\n')\r
155 Content += CommChar + TAB_SPACE_SPLIT + ('\r\n' + CommChar + TAB_SPACE_SPLIT).join\\r
cf2b2bde 156 (GetSplitValueList(Copyright, '\n'))\r
1ccc4d89 157 Content += '\r\n' + CommChar + '\r\n'\r
4234283c
LG
158\r
159 if License:\r
1ccc4d89
LG
160 License = License.rstrip('\r\n')\r
161 Content += CommChar + TAB_SPACE_SPLIT + ('\r\n' + CommChar + TAB_SPACE_SPLIT).join(GetSplitValueList\\r
cf2b2bde 162 (License, '\n'))\r
1ccc4d89 163 Content += '\r\n' + CommChar + '\r\n'\r
f7496d71 164\r
421ccda3 165 if CommChar == TAB_COMMENT_EDK1_SPLIT:\r
1ccc4d89 166 Content += CommChar + TAB_SPACE_SPLIT + TAB_STAR + TAB_COMMENT_EDK1_END + '\r\n'\r
421ccda3 167 else:\r
1ccc4d89 168 Content += CommChar * 2 + '\r\n'\r
f7496d71 169\r
4234283c
LG
170 return Content\r
171\r
172\r
173## GenInfPcdTailComment\r
174# Generate Pcd tail comment for Inf, this would be one line comment\r
175#\r
176# @param Usage: Usage type\r
177# @param TailCommentText: Comment text for tail comment\r
f7496d71 178#\r
4234283c
LG
179def GenInfPcdTailComment (Usage, TailCommentText):\r
180 if (Usage == ITEM_UNDEFINED) and (not TailCommentText):\r
181 return ''\r
f7496d71 182\r
4234283c
LG
183 CommentLine = TAB_SPACE_SPLIT.join([Usage, TailCommentText])\r
184 return GenTailCommentLines(CommentLine)\r
185\r
186## GenInfProtocolPPITailComment\r
187# Generate Protocol/PPI tail comment for Inf\r
188#\r
189# @param Usage: Usage type\r
190# @param TailCommentText: Comment text for tail comment\r
f7496d71 191#\r
4234283c
LG
192def GenInfProtocolPPITailComment (Usage, Notify, TailCommentText):\r
193 if (not Notify) and (Usage == ITEM_UNDEFINED) and (not TailCommentText):\r
194 return ''\r
f7496d71 195\r
4234283c
LG
196 if Notify:\r
197 CommentLine = USAGE_ITEM_NOTIFY + " ## "\r
198 else:\r
199 CommentLine = ''\r
f7496d71 200\r
4234283c
LG
201 CommentLine += TAB_SPACE_SPLIT.join([Usage, TailCommentText])\r
202 return GenTailCommentLines(CommentLine)\r
203\r
204## GenInfGuidTailComment\r
205# Generate Guid tail comment for Inf\r
206#\r
207# @param Usage: Usage type\r
208# @param TailCommentText: Comment text for tail comment\r
f7496d71 209#\r
4234283c
LG
210def GenInfGuidTailComment (Usage, GuidTypeList, VariableName, TailCommentText):\r
211 GuidType = GuidTypeList[0]\r
212 if (Usage == ITEM_UNDEFINED) and (GuidType == ITEM_UNDEFINED) and \\r
213 (not TailCommentText):\r
214 return ''\r
f7496d71
LG
215\r
216 FirstLine = Usage + " ## " + GuidType\r
4234283c
LG
217 if GuidType == TAB_INF_GUIDTYPE_VAR:\r
218 FirstLine += ":" + VariableName\r
f7496d71 219\r
4234283c
LG
220 CommentLine = TAB_SPACE_SPLIT.join([FirstLine, TailCommentText])\r
221 return GenTailCommentLines(CommentLine)\r
222\r
223## GenDecGuidTailComment\r
224#\r
225# @param SupModuleList: Supported module type list\r
f7496d71
LG
226#\r
227def GenDecTailComment (SupModuleList):\r
4234283c
LG
228 CommentLine = TAB_SPACE_SPLIT.join(SupModuleList)\r
229 return GenTailCommentLines(CommentLine)\r
230\r
231\r
232## _GetHelpStr\r
f7496d71 233# get HelpString from a list of HelpTextObject, the priority refer to\r
4234283c
LG
234# related HLD\r
235#\r
236# @param HelpTextObjList: List of HelpTextObject\r
f7496d71 237#\r
4234283c
LG
238# @return HelpStr: the help text string found, '' means no help text found\r
239#\r
240def _GetHelpStr(HelpTextObjList):\r
f7496d71 241 ValueList = []\r
4234283c 242 for HelpObj in HelpTextObjList:\r
421ccda3
HC
243 ValueList.append((HelpObj.GetLang(), HelpObj.GetString()))\r
244 return GetLocalValue(ValueList, True)\r