]>
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.
19 def __init__(self
, name
, tag
=''):
22 self
.mDescription
= ''
25 def AddDescription(self
, desc
):
26 self
.mDescription
= '%s%s' % (self
.mDescription
, desc
)
29 return '\n'.join(self
.mText
)
32 """This interface need to be override"""
34 class Section(BaseDoxygeItem
):
36 """This interface need to be override"""
37 if len(self
.mTag
) != 0:
38 self
.mText
.append(' \section %s %s' % (self
.mName
, self
.mTag
))
40 self
.mText
.append(' \section %s' % self
.mName
)
42 self
.mText
.append(self
.mDescription
)
45 class Page(BaseDoxygeItem
):
46 def __init__(self
, name
, tag
=None, isSort
=True):
47 BaseDoxygeItem
.__init
__(self
, name
, tag
)
49 self
.mIsMainPage
= False
53 def GetSubpageCount(self
):
54 return len(self
.mSubPages
)
56 def AddPage(self
, subpage
):
57 self
.mSubPages
.append(subpage
)
60 def AddPages(self
, pageArray
):
63 for page
in pageArray
:
66 def AddSection(self
, section
):
67 self
.mSections
.append(section
)
68 self
.mSections
.sort(cmp=lambda x
,y
: cmp(x
.mName
.lower(), y
.mName
.lower()))
72 self
.mText
.append('/** \mainpage %s' % self
.mName
)
75 self
.mText
.append('/** \page %s %s' % (self
.mTag
, self
.mName
))
77 if len(self
.mDescription
) != 0:
78 self
.mText
.append(self
.mDescription
)
79 endIndex
= len(self
.mText
)
82 for sect
in self
.mSections
:
83 self
.mText
+= sect
.Generate()
85 endIndex
= len(self
.mText
)
87 if len(self
.mSubPages
) != 0:
88 self
.mText
.insert(endIndex
, "<p> \section content_index INDEX")
89 endIndex
= len(self
.mText
)
90 self
.mText
.insert(endIndex
, '<ul>')
93 self
.mSubPages
.sort(cmp=lambda x
,y
: cmp(x
.mName
.lower(), y
.mName
.lower()))
94 for page
in self
.mSubPages
:
95 self
.mText
.insert(endIndex
, '<li>\subpage %s \"%s\" </li>' % (page
.mTag
, page
.mName
))
97 self
.mText
+= page
.Generate()
98 self
.mText
.insert(endIndex
, '</ul>')
100 self
.mText
.insert(endIndex
, ' **/')
103 class DoxygenFile(Page
):
104 def __init__(self
, name
, file):
105 Page
.__init
__(self
, name
)
106 self
.mFilename
= file
107 self
.mIsMainPage
= True
109 def GetFilename(self
):
110 return self
.mFilename
.replace('/', '\\')
113 str = self
.Generate()
115 f
= open(self
.mFilename
, 'w')
116 f
.write('\n'.join(str))
119 ErrorMsg ('Fail to write file %s' % self
.mFilename
)
124 doxygenConfigTemplate
= """
125 DOXYFILE_ENCODING = UTF-8
126 PROJECT_NAME = %(ProjectName)s
127 PROJECT_NUMBER = %(ProjectVersion)s
128 OUTPUT_DIRECTORY = %(OutputDir)s
130 OUTPUT_LANGUAGE = English
131 BRIEF_MEMBER_DESC = YES
133 ABBREVIATE_BRIEF = "The $name class " \\
134 "The $name widget " \\
144 ALWAYS_DETAILED_SEC = NO
145 INLINE_INHERITED_MEMB = NO
146 FULL_PATH_NAMES = YES
147 STRIP_FROM_PATH = %(StripPath)s
148 STRIP_FROM_INC_PATH =
150 JAVADOC_AUTOBRIEF = NO
152 MULTILINE_CPP_IS_BRIEF = NO
155 SEPARATE_MEMBER_PAGES = NO
158 OPTIMIZE_OUTPUT_FOR_C = YES
159 OPTIMIZE_OUTPUT_JAVA = NO
160 BUILTIN_STL_SUPPORT = NO
163 DISTRIBUTE_GROUP_DOC = YES
165 TYPEDEF_HIDES_STRUCT = NO
170 EXTRACT_LOCAL_CLASSES = NO
171 EXTRACT_LOCAL_METHODS = NO
172 EXTRACT_ANON_NSPACES = NO
173 HIDE_UNDOC_MEMBERS = NO
174 HIDE_UNDOC_CLASSES = NO
175 HIDE_FRIEND_COMPOUNDS = NO
176 HIDE_IN_BODY_DOCS = NO
178 CASE_SENSE_NAMES = NO
179 HIDE_SCOPE_NAMES = NO
180 SHOW_INCLUDE_FILES = NO
182 SORT_MEMBER_DOCS = YES
184 SORT_BY_SCOPE_NAME = YES
185 GENERATE_TODOLIST = YES
186 GENERATE_TESTLIST = YES
187 GENERATE_BUGLIST = YES
188 GENERATE_DEPRECATEDLIST= YES
190 MAX_INITIALIZER_LINES = 30
192 SHOW_DIRECTORIES = NO
193 FILE_VERSION_FILTER =
197 WARN_IF_UNDOCUMENTED = YES
198 WARN_IF_DOC_ERROR = YES
199 WARN_NO_PARAMDOC = YES
200 WARN_FORMAT = "$file:$line: $text "
201 WARN_LOGFILE = %(WarningFile)s
204 INPUT_ENCODING = UTF-8
205 FILE_PATTERNS = %(Pattern)s
208 EXCLUDE_SYMLINKS = NO
209 EXCLUDE_PATTERNS = .svn
211 EXAMPLE_PATH = %(ExamplePath)s
213 EXAMPLE_RECURSIVE = NO
217 FILTER_SOURCE_FILES = NO
221 STRIP_CODE_COMMENTS = YES
222 REFERENCED_BY_RELATION = YES
223 REFERENCES_RELATION = YES
224 REFERENCES_LINK_SOURCE = NO
226 VERBATIM_HEADERS = NO
228 ALPHABETICAL_INDEX = NO
229 COLS_IN_ALPHA_INDEX = 5
234 HTML_FILE_EXTENSION = .html
238 HTML_ALIGN_MEMBERS = YES
239 GENERATE_HTMLHELP = %(WhetherGenerateHtmlHelp)s
240 HTML_DYNAMIC_SECTIONS = NO
247 ENUM_VALUES_PER_LINE = 4
248 GENERATE_TREEVIEW = %(WhetherGenerateTreeView)s
253 LATEX_CMD_NAME = latex
254 MAKEINDEX_CMD_NAME = makeindex
262 LATEX_HIDE_INDICES = NO
268 RTF_STYLESHEET_FILE =
269 RTF_EXTENSIONS_FILE =
280 XML_PROGRAMLISTING = YES
282 GENERATE_AUTOGEN_DEF = NO
284 GENERATE_PERLMOD = NO
287 PERLMOD_MAKEVAR_PREFIX =
289 ENABLE_PREPROCESSING = YES
290 MACRO_EXPANSION = YES
291 EXPAND_ONLY_PREDEF = YES
292 SEARCH_INCLUDES = YES
293 INCLUDE_PATH = %(IncludePath)s
294 INCLUDE_FILE_PATTERNS = *.h
295 PREDEFINED = %(PreDefined)s
297 SKIP_FUNCTION_MACROS = NO
302 EXTERNAL_GROUPS = YES
303 PERL_PATH = /usr/bin/perl
307 HIDE_UNDOC_RELATIONS = YES
310 COLLABORATION_GRAPH = YES
313 TEMPLATE_RELATIONS = NO
315 INCLUDED_BY_GRAPH = YES
318 GRAPHICAL_HIERARCHY = YES
319 DIRECTORY_GRAPH = YES
320 DOT_IMAGE_FORMAT = png
323 DOT_GRAPH_MAX_NODES = 50
324 MAX_DOT_GRAPH_DEPTH = 1000
325 DOT_TRANSPARENT = YES
326 DOT_MULTI_TARGETS = NO
327 GENERATE_LEGEND = YES
333 class DoxygenConfigFile
:
335 self
.mProjectName
= ''
338 self
.mIncludeList
= []
340 self
.mExamplePath
= ''
341 self
.mPattern
= ['*.c', '*.h',
342 '*.asm', '*.s', '.nasm', '*.html', '*.dox']
344 self
.mWarningFile
= ''
345 self
.mPreDefined
= []
346 self
.mProjectVersion
= 0.1
348 def SetChmMode(self
):
351 def SetHtmlMode(self
):
354 def SetProjectName(self
, str):
355 self
.mProjectName
= str
357 def SetProjectVersion(self
, str):
358 self
.mProjectVersion
= str
360 def SetOutputDir(self
, str):
361 self
.mOutputDir
= str
363 def SetStripPath(self
, str):
364 self
.mStripPath
= str
366 def SetExamplePath(self
, str):
367 self
.mExamplePath
= str
369 def SetWarningFilePath(self
, str):
370 self
.mWarningFile
= str.replace('\\', '/')
372 def FileExists(self
, path
):
378 for p
in self
.mFileList
:
379 if path
.lower() == p
.lower():
384 def AddFile(self
, path
):
390 path
= path
.replace('\\', '/')
391 if not self
.FileExists(path
):
392 self
.mFileList
.append(path
)
394 def AddIncludePath(self
, path
):
395 path
= path
.replace('\\', '/')
396 if path
not in self
.mIncludeList
:
397 self
.mIncludeList
.append(path
)
399 def AddPattern(self
, pattern
):
400 self
.mPattern
.append(pattern
)
402 def AddPreDefined(self
, macro
):
403 self
.mPreDefined
.append(macro
)
405 def Generate(self
, path
):
406 files
= ' \\\n'.join(self
.mFileList
)
407 includes
= ' \\\n'.join(self
.mIncludeList
)
408 patterns
= ' \\\n'.join(self
.mPattern
)
409 if self
.mMode
.lower() == 'html':
416 text
= doxygenConfigTemplate
% {'ProjectName':self
.mProjectName
,
417 'OutputDir':self
.mOutputDir
,
418 'StripPath':self
.mStripPath
,
419 'ExamplePath':self
.mExamplePath
,
422 'WhetherGenerateHtmlHelp':sHtmlHelp
,
423 'WhetherGenerateTreeView':sTreeView
,
424 'IncludePath':includes
,
425 'WarningFile':self
.mWarningFile
,
426 'PreDefined':' '.join(self
.mPreDefined
),
427 'ProjectVersion':self
.mProjectVersion
}
433 ErrorMsg ('Fail to generate doxygen config file %s' % path
)
438 ########################################################################
440 ########################################################################
441 if __name__
== '__main__':
442 df
= DoxygenFile('Platform Document', 'm:\tree')
443 df
.AddPage(Page('Module', 'module'))
444 p
= df
.AddPage(Page('Library', 'library'))
445 p
.AddDescription(desc
)
446 p
.AddPage(Page('PCD', 'pcds'))