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