]>
git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/basemodel/doxygen.py
b5ab213cd7f043d6aecc27a6554cb1293cee94e3
3 # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
5 # This program and the accompanying materials are licensed and made available
6 # under the terms and conditions of the BSD License which accompanies this
7 # distribution. The full text of the license may be found at
8 # http://opensource.org/licenses/bsd-license.php
10 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 from __future__
import print_function
20 def __init__(self
, name
, tag
=''):
23 self
.mDescription
= ''
26 def AddDescription(self
, desc
):
27 self
.mDescription
= '%s%s' % (self
.mDescription
, desc
)
30 return '\n'.join(self
.mText
)
33 """This interface need to be override"""
35 class Section(BaseDoxygeItem
):
37 """This interface need to be override"""
38 if len(self
.mTag
) != 0:
39 self
.mText
.append(' \section %s %s' % (self
.mName
, self
.mTag
))
41 self
.mText
.append(' \section %s' % self
.mName
)
43 self
.mText
.append(self
.mDescription
)
46 class Page(BaseDoxygeItem
):
47 def __init__(self
, name
, tag
=None, isSort
=True):
48 BaseDoxygeItem
.__init
__(self
, name
, tag
)
50 self
.mIsMainPage
= False
54 def GetSubpageCount(self
):
55 return len(self
.mSubPages
)
57 def AddPage(self
, subpage
):
58 self
.mSubPages
.append(subpage
)
61 def AddPages(self
, pageArray
):
64 for page
in pageArray
:
67 def AddSection(self
, section
):
68 self
.mSections
.append(section
)
69 self
.mSections
.sort(cmp=lambda x
, y
: cmp(x
.mName
.lower(), y
.mName
.lower()))
73 self
.mText
.append('/** \mainpage %s' % self
.mName
)
76 self
.mText
.append('/** \page %s %s' % (self
.mTag
, self
.mName
))
78 if len(self
.mDescription
) != 0:
79 self
.mText
.append(self
.mDescription
)
80 endIndex
= len(self
.mText
)
83 for sect
in self
.mSections
:
84 self
.mText
+= sect
.Generate()
86 endIndex
= len(self
.mText
)
88 if len(self
.mSubPages
) != 0:
89 self
.mText
.insert(endIndex
, "<p> \section content_index INDEX")
90 endIndex
= len(self
.mText
)
91 self
.mText
.insert(endIndex
, '<ul>')
94 self
.mSubPages
.sort(cmp=lambda x
, y
: cmp(x
.mName
.lower(), y
.mName
.lower()))
95 for page
in self
.mSubPages
:
96 self
.mText
.insert(endIndex
, '<li>\subpage %s \"%s\" </li>' % (page
.mTag
, page
.mName
))
98 self
.mText
+= page
.Generate()
99 self
.mText
.insert(endIndex
, '</ul>')
101 self
.mText
.insert(endIndex
, ' **/')
104 class DoxygenFile(Page
):
105 def __init__(self
, name
, file):
106 Page
.__init
__(self
, name
)
107 self
.mFilename
= file
108 self
.mIsMainPage
= True
110 def GetFilename(self
):
111 return self
.mFilename
.replace('/', '\\')
114 str = self
.Generate()
116 f
= open(self
.mFilename
, 'w')
117 f
.write('\n'.join(str))
120 ErrorMsg ('Fail to write file %s' % self
.mFilename
)
125 doxygenConfigTemplate
= """
126 DOXYFILE_ENCODING = UTF-8
127 PROJECT_NAME = %(ProjectName)s
128 PROJECT_NUMBER = %(ProjectVersion)s
129 OUTPUT_DIRECTORY = %(OutputDir)s
131 OUTPUT_LANGUAGE = English
132 BRIEF_MEMBER_DESC = YES
134 ABBREVIATE_BRIEF = "The $name class " \\
135 "The $name widget " \\
145 ALWAYS_DETAILED_SEC = NO
146 INLINE_INHERITED_MEMB = NO
147 FULL_PATH_NAMES = YES
148 STRIP_FROM_PATH = %(StripPath)s
149 STRIP_FROM_INC_PATH =
151 JAVADOC_AUTOBRIEF = NO
153 MULTILINE_CPP_IS_BRIEF = NO
156 SEPARATE_MEMBER_PAGES = NO
159 OPTIMIZE_OUTPUT_FOR_C = YES
160 OPTIMIZE_OUTPUT_JAVA = NO
161 BUILTIN_STL_SUPPORT = NO
164 DISTRIBUTE_GROUP_DOC = YES
166 TYPEDEF_HIDES_STRUCT = NO
171 EXTRACT_LOCAL_CLASSES = NO
172 EXTRACT_LOCAL_METHODS = NO
173 EXTRACT_ANON_NSPACES = NO
174 HIDE_UNDOC_MEMBERS = NO
175 HIDE_UNDOC_CLASSES = NO
176 HIDE_FRIEND_COMPOUNDS = NO
177 HIDE_IN_BODY_DOCS = NO
179 CASE_SENSE_NAMES = NO
180 HIDE_SCOPE_NAMES = NO
181 SHOW_INCLUDE_FILES = NO
183 SORT_MEMBER_DOCS = YES
185 SORT_BY_SCOPE_NAME = YES
186 GENERATE_TODOLIST = YES
187 GENERATE_TESTLIST = YES
188 GENERATE_BUGLIST = YES
189 GENERATE_DEPRECATEDLIST= YES
191 MAX_INITIALIZER_LINES = 30
193 SHOW_DIRECTORIES = NO
194 FILE_VERSION_FILTER =
198 WARN_IF_UNDOCUMENTED = YES
199 WARN_IF_DOC_ERROR = YES
200 WARN_NO_PARAMDOC = YES
201 WARN_FORMAT = "$file:$line: $text "
202 WARN_LOGFILE = %(WarningFile)s
205 INPUT_ENCODING = UTF-8
206 FILE_PATTERNS = %(Pattern)s
209 EXCLUDE_SYMLINKS = NO
210 EXCLUDE_PATTERNS = .svn
212 EXAMPLE_PATH = %(ExamplePath)s
214 EXAMPLE_RECURSIVE = NO
218 FILTER_SOURCE_FILES = NO
222 STRIP_CODE_COMMENTS = YES
223 REFERENCED_BY_RELATION = YES
224 REFERENCES_RELATION = YES
225 REFERENCES_LINK_SOURCE = NO
227 VERBATIM_HEADERS = NO
229 ALPHABETICAL_INDEX = NO
230 COLS_IN_ALPHA_INDEX = 5
235 HTML_FILE_EXTENSION = .html
239 HTML_ALIGN_MEMBERS = YES
240 GENERATE_HTMLHELP = %(WhetherGenerateHtmlHelp)s
241 HTML_DYNAMIC_SECTIONS = NO
248 ENUM_VALUES_PER_LINE = 4
249 GENERATE_TREEVIEW = %(WhetherGenerateTreeView)s
254 LATEX_CMD_NAME = latex
255 MAKEINDEX_CMD_NAME = makeindex
263 LATEX_HIDE_INDICES = NO
269 RTF_STYLESHEET_FILE =
270 RTF_EXTENSIONS_FILE =
281 XML_PROGRAMLISTING = YES
283 GENERATE_AUTOGEN_DEF = NO
285 GENERATE_PERLMOD = NO
288 PERLMOD_MAKEVAR_PREFIX =
290 ENABLE_PREPROCESSING = YES
291 MACRO_EXPANSION = YES
292 EXPAND_ONLY_PREDEF = YES
293 SEARCH_INCLUDES = YES
294 INCLUDE_PATH = %(IncludePath)s
295 INCLUDE_FILE_PATTERNS = *.h
296 PREDEFINED = %(PreDefined)s
298 SKIP_FUNCTION_MACROS = NO
303 EXTERNAL_GROUPS = YES
304 PERL_PATH = /usr/bin/perl
308 HIDE_UNDOC_RELATIONS = YES
311 COLLABORATION_GRAPH = YES
314 TEMPLATE_RELATIONS = NO
316 INCLUDED_BY_GRAPH = YES
319 GRAPHICAL_HIERARCHY = YES
320 DIRECTORY_GRAPH = YES
321 DOT_IMAGE_FORMAT = png
324 DOT_GRAPH_MAX_NODES = 50
325 MAX_DOT_GRAPH_DEPTH = 1000
326 DOT_TRANSPARENT = YES
327 DOT_MULTI_TARGETS = NO
328 GENERATE_LEGEND = YES
334 class DoxygenConfigFile
:
336 self
.mProjectName
= ''
339 self
.mIncludeList
= []
341 self
.mExamplePath
= ''
342 self
.mPattern
= ['*.c', '*.h',
343 '*.asm', '*.s', '.nasm', '*.html', '*.dox']
345 self
.mWarningFile
= ''
346 self
.mPreDefined
= []
347 self
.mProjectVersion
= 0.1
349 def SetChmMode(self
):
352 def SetHtmlMode(self
):
355 def SetProjectName(self
, str):
356 self
.mProjectName
= str
358 def SetProjectVersion(self
, str):
359 self
.mProjectVersion
= str
361 def SetOutputDir(self
, str):
362 self
.mOutputDir
= str
364 def SetStripPath(self
, str):
365 self
.mStripPath
= str
367 def SetExamplePath(self
, str):
368 self
.mExamplePath
= str
370 def SetWarningFilePath(self
, str):
371 self
.mWarningFile
= str.replace('\\', '/')
373 def FileExists(self
, path
):
379 for p
in self
.mFileList
:
380 if path
.lower() == p
.lower():
385 def AddFile(self
, path
):
391 path
= path
.replace('\\', '/')
392 if not self
.FileExists(path
):
393 self
.mFileList
.append(path
)
395 def AddIncludePath(self
, path
):
396 path
= path
.replace('\\', '/')
397 if path
not in self
.mIncludeList
:
398 self
.mIncludeList
.append(path
)
400 def AddPattern(self
, pattern
):
401 self
.mPattern
.append(pattern
)
403 def AddPreDefined(self
, macro
):
404 self
.mPreDefined
.append(macro
)
406 def Generate(self
, path
):
407 files
= ' \\\n'.join(self
.mFileList
)
408 includes
= ' \\\n'.join(self
.mIncludeList
)
409 patterns
= ' \\\n'.join(self
.mPattern
)
410 if self
.mMode
.lower() == 'html':
417 text
= doxygenConfigTemplate
% {'ProjectName':self
.mProjectName
,
418 'OutputDir':self
.mOutputDir
,
419 'StripPath':self
.mStripPath
,
420 'ExamplePath':self
.mExamplePath
,
423 'WhetherGenerateHtmlHelp':sHtmlHelp
,
424 'WhetherGenerateTreeView':sTreeView
,
425 'IncludePath':includes
,
426 'WarningFile':self
.mWarningFile
,
427 'PreDefined':' '.join(self
.mPreDefined
),
428 'ProjectVersion':self
.mProjectVersion
}
434 ErrorMsg ('Fail to generate doxygen config file %s' % path
)
439 ########################################################################
441 ########################################################################
442 if __name__
== '__main__':
443 df
= DoxygenFile('Platform Document', 'm:\tree')
444 df
.AddPage(Page('Module', 'module'))
445 p
= df
.AddPage(Page('Library', 'library'))
446 p
.AddDescription(desc
)
447 p
.AddPage(Page('PCD', 'pcds'))