]>
git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/basemodel/doxygen.py
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
15 from __future__
import absolute_import
18 from .message
import *
21 def __init__(self
, name
, tag
=''):
24 self
.mDescription
= ''
27 def AddDescription(self
, desc
):
28 self
.mDescription
= '%s%s' % (self
.mDescription
, desc
)
31 return '\n'.join(self
.mText
)
34 """This interface need to be override"""
36 class Section(BaseDoxygeItem
):
38 """This interface need to be override"""
39 if len(self
.mTag
) != 0:
40 self
.mText
.append(' \section %s %s' % (self
.mName
, self
.mTag
))
42 self
.mText
.append(' \section %s' % self
.mName
)
44 self
.mText
.append(self
.mDescription
)
47 class Page(BaseDoxygeItem
):
48 def __init__(self
, name
, tag
=None, isSort
=True):
49 BaseDoxygeItem
.__init
__(self
, name
, tag
)
51 self
.mIsMainPage
= False
55 def GetSubpageCount(self
):
56 return len(self
.mSubPages
)
58 def AddPage(self
, subpage
):
59 self
.mSubPages
.append(subpage
)
62 def AddPages(self
, pageArray
):
65 for page
in pageArray
:
68 def AddSection(self
, section
):
69 self
.mSections
.append(section
)
70 self
.mSections
.sort(key
=lambda x
: x
.mName
.lower())
74 self
.mText
.append('/** \mainpage %s' % self
.mName
)
77 self
.mText
.append('/** \page %s %s' % (self
.mTag
, self
.mName
))
79 if len(self
.mDescription
) != 0:
80 self
.mText
.append(self
.mDescription
)
81 endIndex
= len(self
.mText
)
83 self
.mSections
.sort(key
=lambda x
: x
.mName
.lower())
84 for sect
in self
.mSections
:
85 self
.mText
+= sect
.Generate()
87 endIndex
= len(self
.mText
)
89 if len(self
.mSubPages
) != 0:
90 self
.mText
.insert(endIndex
, "<p> \section content_index INDEX")
91 endIndex
= len(self
.mText
)
92 self
.mText
.insert(endIndex
, '<ul>')
95 self
.mSubPages
.sort(key
=lambda x
: x
.mName
.lower())
96 for page
in self
.mSubPages
:
97 self
.mText
.insert(endIndex
, '<li>\subpage %s \"%s\" </li>' % (page
.mTag
, page
.mName
))
99 self
.mText
+= page
.Generate()
100 self
.mText
.insert(endIndex
, '</ul>')
102 self
.mText
.insert(endIndex
, ' **/')
105 class DoxygenFile(Page
):
106 def __init__(self
, name
, file):
107 Page
.__init
__(self
, name
)
108 self
.mFilename
= file
109 self
.mIsMainPage
= True
111 def GetFilename(self
):
112 return self
.mFilename
.replace('/', '\\')
115 str = self
.Generate()
117 f
= open(self
.mFilename
, 'w')
118 f
.write('\n'.join(str))
121 ErrorMsg ('Fail to write file %s' % self
.mFilename
)
126 doxygenConfigTemplate
= """
127 DOXYFILE_ENCODING = UTF-8
128 PROJECT_NAME = %(ProjectName)s
129 PROJECT_NUMBER = %(ProjectVersion)s
130 OUTPUT_DIRECTORY = %(OutputDir)s
132 OUTPUT_LANGUAGE = English
133 BRIEF_MEMBER_DESC = YES
135 ABBREVIATE_BRIEF = "The $name class " \\
136 "The $name widget " \\
146 ALWAYS_DETAILED_SEC = NO
147 INLINE_INHERITED_MEMB = NO
148 FULL_PATH_NAMES = YES
149 STRIP_FROM_PATH = %(StripPath)s
150 STRIP_FROM_INC_PATH =
152 JAVADOC_AUTOBRIEF = NO
154 MULTILINE_CPP_IS_BRIEF = NO
157 SEPARATE_MEMBER_PAGES = NO
160 OPTIMIZE_OUTPUT_FOR_C = YES
161 OPTIMIZE_OUTPUT_JAVA = NO
162 BUILTIN_STL_SUPPORT = NO
165 DISTRIBUTE_GROUP_DOC = YES
167 TYPEDEF_HIDES_STRUCT = NO
172 EXTRACT_LOCAL_CLASSES = NO
173 EXTRACT_LOCAL_METHODS = NO
174 EXTRACT_ANON_NSPACES = NO
175 HIDE_UNDOC_MEMBERS = NO
176 HIDE_UNDOC_CLASSES = NO
177 HIDE_FRIEND_COMPOUNDS = NO
178 HIDE_IN_BODY_DOCS = NO
180 CASE_SENSE_NAMES = NO
181 HIDE_SCOPE_NAMES = NO
182 SHOW_INCLUDE_FILES = NO
184 SORT_MEMBER_DOCS = YES
186 SORT_BY_SCOPE_NAME = YES
187 GENERATE_TODOLIST = YES
188 GENERATE_TESTLIST = YES
189 GENERATE_BUGLIST = YES
190 GENERATE_DEPRECATEDLIST= YES
192 MAX_INITIALIZER_LINES = 30
194 SHOW_DIRECTORIES = NO
195 FILE_VERSION_FILTER =
199 WARN_IF_UNDOCUMENTED = YES
200 WARN_IF_DOC_ERROR = YES
201 WARN_NO_PARAMDOC = YES
202 WARN_FORMAT = "$file:$line: $text "
203 WARN_LOGFILE = %(WarningFile)s
206 INPUT_ENCODING = UTF-8
207 FILE_PATTERNS = %(Pattern)s
210 EXCLUDE_SYMLINKS = NO
211 EXCLUDE_PATTERNS = .svn
213 EXAMPLE_PATH = %(ExamplePath)s
215 EXAMPLE_RECURSIVE = NO
219 FILTER_SOURCE_FILES = NO
223 STRIP_CODE_COMMENTS = YES
224 REFERENCED_BY_RELATION = YES
225 REFERENCES_RELATION = YES
226 REFERENCES_LINK_SOURCE = NO
228 VERBATIM_HEADERS = NO
230 ALPHABETICAL_INDEX = NO
231 COLS_IN_ALPHA_INDEX = 5
236 HTML_FILE_EXTENSION = .html
240 HTML_ALIGN_MEMBERS = YES
241 GENERATE_HTMLHELP = %(WhetherGenerateHtmlHelp)s
242 HTML_DYNAMIC_SECTIONS = NO
249 ENUM_VALUES_PER_LINE = 4
250 GENERATE_TREEVIEW = %(WhetherGenerateTreeView)s
255 LATEX_CMD_NAME = latex
256 MAKEINDEX_CMD_NAME = makeindex
264 LATEX_HIDE_INDICES = NO
270 RTF_STYLESHEET_FILE =
271 RTF_EXTENSIONS_FILE =
282 XML_PROGRAMLISTING = YES
284 GENERATE_AUTOGEN_DEF = NO
286 GENERATE_PERLMOD = NO
289 PERLMOD_MAKEVAR_PREFIX =
291 ENABLE_PREPROCESSING = YES
292 MACRO_EXPANSION = YES
293 EXPAND_ONLY_PREDEF = YES
294 SEARCH_INCLUDES = YES
295 INCLUDE_PATH = %(IncludePath)s
296 INCLUDE_FILE_PATTERNS = *.h
297 PREDEFINED = %(PreDefined)s
299 SKIP_FUNCTION_MACROS = NO
304 EXTERNAL_GROUPS = YES
305 PERL_PATH = /usr/bin/perl
309 HIDE_UNDOC_RELATIONS = YES
312 COLLABORATION_GRAPH = YES
315 TEMPLATE_RELATIONS = NO
317 INCLUDED_BY_GRAPH = YES
320 GRAPHICAL_HIERARCHY = YES
321 DIRECTORY_GRAPH = YES
322 DOT_IMAGE_FORMAT = png
325 DOT_GRAPH_MAX_NODES = 50
326 MAX_DOT_GRAPH_DEPTH = 1000
327 DOT_TRANSPARENT = YES
328 DOT_MULTI_TARGETS = NO
329 GENERATE_LEGEND = YES
335 class DoxygenConfigFile
:
337 self
.mProjectName
= ''
340 self
.mIncludeList
= []
342 self
.mExamplePath
= ''
343 self
.mPattern
= ['*.c', '*.h',
344 '*.asm', '*.s', '.nasm', '*.html', '*.dox']
346 self
.mWarningFile
= ''
347 self
.mPreDefined
= []
348 self
.mProjectVersion
= 0.1
350 def SetChmMode(self
):
353 def SetHtmlMode(self
):
356 def SetProjectName(self
, str):
357 self
.mProjectName
= str
359 def SetProjectVersion(self
, str):
360 self
.mProjectVersion
= str
362 def SetOutputDir(self
, str):
363 self
.mOutputDir
= str
365 def SetStripPath(self
, str):
366 self
.mStripPath
= str
368 def SetExamplePath(self
, str):
369 self
.mExamplePath
= str
371 def SetWarningFilePath(self
, str):
372 self
.mWarningFile
= str.replace('\\', '/')
374 def FileExists(self
, path
):
380 for p
in self
.mFileList
:
381 if path
.lower() == p
.lower():
386 def AddFile(self
, path
):
392 path
= path
.replace('\\', '/')
393 if not self
.FileExists(path
):
394 self
.mFileList
.append(path
)
396 def AddIncludePath(self
, path
):
397 path
= path
.replace('\\', '/')
398 if path
not in self
.mIncludeList
:
399 self
.mIncludeList
.append(path
)
401 def AddPattern(self
, pattern
):
402 self
.mPattern
.append(pattern
)
404 def AddPreDefined(self
, macro
):
405 self
.mPreDefined
.append(macro
)
407 def Generate(self
, path
):
408 files
= ' \\\n'.join(self
.mFileList
)
409 includes
= ' \\\n'.join(self
.mIncludeList
)
410 patterns
= ' \\\n'.join(self
.mPattern
)
411 if self
.mMode
.lower() == 'html':
418 text
= doxygenConfigTemplate
% {'ProjectName':self
.mProjectName
,
419 'OutputDir':self
.mOutputDir
,
420 'StripPath':self
.mStripPath
,
421 'ExamplePath':self
.mExamplePath
,
424 'WhetherGenerateHtmlHelp':sHtmlHelp
,
425 'WhetherGenerateTreeView':sTreeView
,
426 'IncludePath':includes
,
427 'WarningFile':self
.mWarningFile
,
428 'PreDefined':' '.join(self
.mPreDefined
),
429 'ProjectVersion':self
.mProjectVersion
}
435 ErrorMsg ('Fail to generate doxygen config file %s' % path
)
440 ########################################################################
442 ########################################################################
443 if __name__
== '__main__':
444 df
= DoxygenFile('Platform Document', 'm:\tree')
445 df
.AddPage(Page('Module', 'module'))
446 p
= df
.AddPage(Page('Library', 'library'))
447 p
.AddDescription(desc
)
448 p
.AddPage(Page('PCD', 'pcds'))