From d1faf061a43d7ba84a4ccc218f2ae94ac8d6040f Mon Sep 17 00:00:00 2001 From: Shea690901 Date: Sun, 17 Dec 2017 23:16:43 +0100 Subject: [PATCH] (config): buffer vise configuration One might want to have C-comments (/* */) for C-files and C++-comments (// ) for C++-files or need different settings for different projects (eg.: style-guide requirements) This patch provides a primitive (and not performant) implementation... Signed-off-by: Shea690901 --- plugin/DoxygenToolkit.vim | 470 +++++++++++++++++++------------------- 1 file changed, 236 insertions(+), 234 deletions(-) diff --git a/plugin/DoxygenToolkit.vim b/plugin/DoxygenToolkit.vim index 37d51a6..fac96c8 100644 --- a/plugin/DoxygenToolkit.vim +++ b/plugin/DoxygenToolkit.vim @@ -9,12 +9,12 @@ " TODO: (Python) Check default paramareters defined as list/dictionnary/tuple " " Note: Correct insertion position and 'xxx_post' parameters. -" - Insert position is correct when g:DoxygenToolkit_compactOneLineDoc = "yes" -" and let g:DoxygenToolkit_commentType = "C++" are set. +" - Insert position is correct when b:DoxygenToolkit_compactOneLineDoc = "yes" +" and let b:DoxygenToolkit_commentType = "C++" are set. " - When you define: -" g:DoxygenToolkit_briefTag_pre = "@brief " -" g:DoxygenToolkit_briefTag_post = "<++>" -" g:DoxygenToolkit_briefTag_funcName = "yes" +" b:DoxygenToolkit_briefTag_pre = "@brief " +" b:DoxygenToolkit_briefTag_post = "<++>" +" b:DoxygenToolkit_briefTag_funcName = "yes" " Documentation generated with these parameters is something like: " /// @brief foo <++> " You can configure similarly parameters to get something like: @@ -33,13 +33,13 @@ " - Template parameter of different type from class and typename are " recognized. " - Indentation mistake while detecting template. -" - New option are available: g:DoxygenToolkit_throwTag_pre and -" g:DoxygenToolkit_throwTag_post +" - New option are available: b:DoxygenToolkit_throwTag_pre and +" b:DoxygenToolkit_throwTag_post " " Note: Add support for documentation of template parameters. " Thanks to Dennis (plasmahh) and its suggestions. -" - New option are available: g:DoxygenToolkit_templateParamTag_pre -" and g:DoxygenToolkit_templateParamTag_post +" - New option are available: b:DoxygenToolkit_templateParamTag_pre +" and b:DoxygenToolkit_templateParamTag_post " " Note: Solve almost all compatibility problem with c/c++ IDE " @@ -58,7 +58,7 @@ " Note: Added @version tag into the DocBlock generated by DoxygenAuthorFunc() " (thanks to Dave Walter). " The version string can be defines into your .vimrc file with -" g:DoxygenToolkit_versionString or it will be asked the first time the +" b:DoxygenToolkit_versionString or it will be asked the first time the " function is called (same behavior as @author tag). Example: " /// \file foo.cpp " /// \brief @@ -86,15 +86,15 @@ " - There is now support for function pointer as parameter (C/C++). " - You can configure the script to get one line documentation (for " attribute instance for example, you need to set -" g:DoxygenToolkit_compactOneLineDoc to "yes"). +" b:DoxygenToolkit_compactOneLineDoc to "yes"). " " - NEW: Support Python scripts: " - Function/method are not scanned, so by default they are considered " as if they always return something (modify this behavior by defining -" g:DoxygenToolkit_python_autoFunctionReturn to "no") +" b:DoxygenToolkit_python_autoFunctionReturn to "no") " - self parameter is automatically ignored when scanning function " parameters (you can change this behavior by defining -" g:DoxygenToolkit_python_autoRemoveSelfParam to "no") +" b:DoxygenToolkit_python_autoRemoveSelfParam to "no") " " Note: Number of lines scanned is now configurable. Default value is still 10 " lines. (Thanks to Spencer Collyer for this improvement). @@ -104,11 +104,11 @@ " " Note: Remove header and footer from doxygen documentation " - Generated documentation with block header/footer activated (see -" parameters g:DoxygenToolkit_blockHeader and -" g:DoxygenToolkit_blockFooter) do not integrate header and footer +" parameters b:DoxygenToolkit_blockHeader and +" b:DoxygenToolkit_blockFooter) do not integrate header and footer " anymore. " Thanks to Justin RANDALL for this. -" Now comments are as following: +" Now comments are as followinb: " /* --- My Header --- */ // --- My Header --- " /** /// @brief ... " * @brief ... or // --- My Footer --- @@ -116,7 +116,7 @@ " /* -- My Footer --- */ " " Note: Changes to customize cinoptions -" - New option available for cinoptions : g:DoxygenToolkit_cinoptions +" - New option available for cinoptions : b:DoxygenToolkit_cinoptions " (default value is still c1C1) " Thanks to Arnaud GODET for this. Now comment can have the following " look: @@ -126,7 +126,7 @@ " Note: Changes for linux kernel comment style " - New option are available for brief tag and parameter tag ! Now there is " a pre and a post tag for each of these tag. -" - You can define 'let g:DoxygenToolkit_briefTag_funcName = "yes"' to add +" - You can define 'let b:DoxygenToolkit_briefTag_funcName = "yes"' to add " the name of commented function between pre-brief tag and post-brief tag. " - With these new features you can get something like: " /** @@ -135,7 +135,7 @@ " * @param foo: " * @param bar: " */ -" Note: Changes suggested by Soh Kok Hong: +" Note: Changes suggested by Soh Kok Honb: " - Fixed indentation in comments " ( no more /** /** " * but * @@ -177,7 +177,7 @@ " Use: " - Type of comments (C/C++: /// or /** ... */, Python: ## and # ) : " In vim, default C++ comments are : /** ... */. But if you prefer to use /// -" Doxygen comments just add 'let g:DoxygenToolkit_commentType = "C++"' +" Doxygen comments just add 'let b:DoxygenToolkit_commentType = "C++"' " (without quotes) in your .vimrc file " " - License : @@ -243,18 +243,18 @@ " */ " " -" To customize the output of the script, see the g:DoxygenToolkit_* +" To customize the output of the script, see the b:DoxygenToolkit_* " variables in the script's source. These variables can be set in your " .vimrc. " " For example, my .vimrc contains: -" let g:DoxygenToolkit_briefTag_pre="@Synopsis " -" let g:DoxygenToolkit_paramTag_pre="@Param " -" let g:DoxygenToolkit_returnTag="@Returns " -" let g:DoxygenToolkit_blockHeader="--------------------------------------------------------------------------" -" let g:DoxygenToolkit_blockFooter="----------------------------------------------------------------------------" -" let g:DoxygenToolkit_authorName="Mathias Lorente" -" let g:DoxygenToolkit_licenseTag="My own license" <-- Does not end with +" let b:DoxygenToolkit_briefTag_pre="@Synopsis " +" let b:DoxygenToolkit_paramTag_pre="@Param " +" let b:DoxygenToolkit_returnTag="@Returns " +" let b:DoxygenToolkit_blockHeader="--------------------------------------------------------------------------" +" let b:DoxygenToolkit_blockFooter="----------------------------------------------------------------------------" +" let b:DoxygenToolkit_authorName="Mathias Lorente" +" let b:DoxygenToolkit_licenseTag="My own license" <-- Does not end with " "\" @@ -278,162 +278,6 @@ let s:licenseTag = s:licenseTag . "You should have received a copy of the GNU Ge let s:licenseTag = s:licenseTag . "along with this program; if not, write to the Free Software\" let s:licenseTag = s:licenseTag . "Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\" -" Common standard constants -if !exists("g:DoxygenToolkit_briefTag_pre") - let g:DoxygenToolkit_briefTag_pre = "@brief " -endif -if !exists("g:DoxygenToolkit_briefTag_post") - let g:DoxygenToolkit_briefTag_post = "" -endif -if !exists("g:DoxygenToolkit_templateParamTag_pre") - let g:DoxygenToolkit_templateParamTag_pre = "@tparam " -endif -if !exists("g:DoxygenToolkit_templateParamTag_post") - let g:DoxygenToolkit_templateParamTag_post = "" -endif -if !exists("g:DoxygenToolkit_paramTag_pre") - let g:DoxygenToolkit_paramTag_pre = "@param " -endif -if !exists("g:DoxygenToolkit_paramTag_post") - let g:DoxygenToolkit_paramTag_post = "" -endif -if !exists("g:DoxygenToolkit_returnTag") - let g:DoxygenToolkit_returnTag = "@return " -endif -if !exists("g:DoxygenToolkit_throwTag_pre") - let g:DoxygenToolkit_throwTag_pre = "@throw " " @exception is also valid -endif -if !exists("g:DoxygenToolkit_throwTag_post") - let g:DoxygenToolkit_throwTag_post = "" -endif -if !exists("g:DoxygenToolkit_blockHeader") - let g:DoxygenToolkit_blockHeader = "" -endif -if !exists("g:DoxygenToolkit_blockFooter") - let g:DoxygenToolkit_blockFooter = "" -endif -if !exists("g:DoxygenToolkit_licenseTag") - let g:DoxygenToolkit_licenseTag = s:licenseTag -endif -if !exists("g:DoxygenToolkit_fileTag") - let g:DoxygenToolkit_fileTag = "@file " -endif -if !exists("g:DoxygenToolkit_authorTag") - let g:DoxygenToolkit_authorTag = "@author " -endif -if !exists("g:DoxygenToolkit_dateTag") - let g:DoxygenToolkit_dateTag = "@date " -endif -if !exists("g:DoxygenToolkit_versionTag") - let g:DoxygenToolkit_versionTag = "@version " -endif -if !exists("g:DoxygenToolkit_undocTag") - let g:DoxygenToolkit_undocTag = "DOX_SKIP_BLOCK" -endif -if !exists("g:DoxygenToolkit_blockTag") - let g:DoxygenToolkit_blockTag = "@name " -endif -if !exists("g:DoxygenToolkit_classTag") - let g:DoxygenToolkit_classTag = "@class " -endif - -if !exists("g:DoxygenToolkit_cinoptions") - let g:DoxygenToolkit_cinoptions = "c1C1" -endif -if !exists("g:DoxygenToolkit_startCommentTag ") - let g:DoxygenToolkit_startCommentTag = "/** " - let g:DoxygenToolkit_startCommentBlock = "/* " -endif -if !exists("g:DoxygenToolkit_interCommentTag ") - let g:DoxygenToolkit_interCommentTag = "* " -endif -if !exists("g:DoxygenToolkit_interCommentBlock ") - let g:DoxygenToolkit_interCommentBlock = "* " -endif -if !exists("g:DoxygenToolkit_endCommentTag ") - let g:DoxygenToolkit_endCommentTag = "*/" - let g:DoxygenToolkit_endCommentBlock = "*/" -endif -if exists("g:DoxygenToolkit_commentType") - if ( g:DoxygenToolkit_commentType == "C++" ) - let g:DoxygenToolkit_startCommentTag = "/// " - let g:DoxygenToolkit_interCommentTag = "/// " - let g:DoxygenToolkit_endCommentTag = "" - let g:DoxygenToolkit_startCommentBlock = "// " - let g:DoxygenToolkit_interCommentBlock = "// " - let g:DoxygenToolkit_endCommentBlock = "" - else - let g:DoxygenToolkit_commentType = "C" - endif -else - let g:DoxygenToolkit_commentType = "C" -endif - -" Compact documentation -" /** -" * \brief foo ---> /** \brief foo */ -" */ -if !exists("g:DoxygenToolkit_compactOneLineDoc") - let g:DoxygenToolkit_compactOneLineDoc = "no" -endif -" /** -" * \brief foo /** -" * * \brief foo -" * \param bar ---> * \param bar -" * * \return -" * \return */ -" */ -if !exists("g:DoxygenToolkit_compactDoc") - let g:DoxygenToolkit_compactDoc = "no" -endif - -" Necessary '\<' and '\>' will be added to each item of the list. -let s:ignoreForReturn = ['template', 'explicit', 'inline', 'static', 'virtual', 'void\([[:blank:]]*\*\)\@!', 'const', 'volatile', 'struct', 'extern'] -if !exists("g:DoxygenToolkit_ignoreForReturn") - let g:DoxygenToolkit_ignoreForReturn = s:ignoreForReturn[:] -else - let g:DoxygenToolkit_ignoreForReturn += s:ignoreForReturn -endif -unlet s:ignoreForReturn - -" Maximum number of lines to check for function parameters -if !exists("g:DoxygenToolkit_maxFunctionProtoLines") - let g:DoxygenToolkit_maxFunctionProtoLines = 10 -endif - -" Add name of function/class/struct... after pre brief tag if you want -if !exists("g:DoxygenToolkit_briefTag_className") - let g:DoxygenToolkit_briefTag_className = "no" -endif -if !exists("g:DoxygenToolkit_briefTag_structName") - let g:DoxygenToolkit_briefTag_structName = "no" -endif -if !exists("g:DoxygenToolkit_briefTag_enumName") - let g:DoxygenToolkit_briefTag_enumName = "no" -endif -if !exists("g:DoxygenToolkit_briefTag_namespaceName") - let g:DoxygenToolkit_briefTag_namespaceName = "no" -endif -if !exists("g:DoxygenToolkit_briefTag_funcName") - let g:DoxygenToolkit_briefTag_funcName = "no" -endif - -" Keep empty line (if any) between comment and function/class/... -if !exists("g:DoxygenToolkit_keepEmptyLineAfterComment") - let g:DoxygenToolkit_keepEmptyLineAfterComment = "no" -endif - -" PYTHON specific -""""""""""""""""" -" Remove automatically self parameter from function to avoid its documantation -if !exists("g:DoxygenToolkit_python_autoRemoveSelfParam") - let g:DoxygenToolkit_python_autoRemoveSelfParam = "yes" -endif -" Consider functions as if they always return something (default: yes) -if !exists("g:DoxygenToolkit_python_autoFunctionReturn") - let g:DoxygenToolkit_python_autoFunctionReturn = "yes" -endif - """""""""""""""""""""""""" " Doxygen license comment @@ -442,18 +286,18 @@ function! DoxygenLicenseFunc() call s:InitializeParameters() " Test authorName variable - if !exists("g:DoxygenToolkit_authorName") - let g:DoxygenToolkit_authorName = input("Enter name of the author (generally yours...) : ") + if !exists("b:DoxygenToolkit_authorName") + let b:DoxygenToolkit_authorName = input("Enter name of the author (generally yours...) : ") endif mark d let l:date = strftime("%Y") exec "normal O".strpart( s:startCommentBlock, 0, 1 ) - exec "normal A".strpart( s:startCommentBlock, 1 ).substitute( g:DoxygenToolkit_licenseTag, "\", "\".s:interCommentBlock, "g" ) + exec "normal A".strpart( s:startCommentBlock, 1 ).substitute( b:DoxygenToolkit_licenseTag, "\", "\".s:interCommentBlock, "g" ) if( s:endCommentBlock != "" ) exec "normal o".s:endCommentBlock endif - if( g:DoxygenToolkit_licenseTag == s:licenseTag ) - exec "normal %jA".l:date." - ".g:DoxygenToolkit_authorName + if( b:DoxygenToolkit_licenseTag == s:licenseTag ) + exec "normal %jA".l:date." - ".b:DoxygenToolkit_authorName endif exec "normal `d" @@ -468,13 +312,13 @@ function! DoxygenAuthorFunc() call s:InitializeParameters() " Test authorName variable - if !exists("g:DoxygenToolkit_authorName") - let g:DoxygenToolkit_authorName = input("Enter name of the author (generally yours...) : ") + if !exists("b:DoxygenToolkit_authorName") + let b:DoxygenToolkit_authorName = input("Enter name of the author (generally yours...) : ") endif " Test versionString variable - if !exists("g:DoxygenToolkit_versionString") - let g:DoxygenToolkit_versionString = input("Enter version string : ") + if !exists("b:DoxygenToolkit_versionString") + let b:DoxygenToolkit_versionString = input("Enter version string : ") endif " Get file name @@ -482,14 +326,14 @@ function! DoxygenAuthorFunc() " Begin to write skeleton let l:insertionMode = s:StartDocumentationBlock() - exec "normal ".l:insertionMode.s:interCommentTag.g:DoxygenToolkit_fileTag.l:fileName - exec "normal o".s:interCommentTag.g:DoxygenToolkit_briefTag_pre + exec "normal ".l:insertionMode.s:interCommentTag.b:DoxygenToolkit_fileTag.l:fileName + exec "normal o".s:interCommentTag.b:DoxygenToolkit_briefTag_pre mark d - exec "normal o".s:interCommentTag.g:DoxygenToolkit_authorTag.g:DoxygenToolkit_authorName - exec "normal o".s:interCommentTag.g:DoxygenToolkit_versionTag.g:DoxygenToolkit_versionString + exec "normal o".s:interCommentTag.b:DoxygenToolkit_authorTag.b:DoxygenToolkit_authorName + exec "normal o".s:interCommentTag.b:DoxygenToolkit_versionTag.b:DoxygenToolkit_versionString let l:date = strftime("%Y-%m-%d") - exec "normal o".s:interCommentTag.g:DoxygenToolkit_dateTag.l:date - if ( g:DoxygenToolkit_endCommentTag != "" ) + exec "normal o".s:interCommentTag.b:DoxygenToolkit_dateTag.l:date + if ( b:DoxygenToolkit_endCommentTag != "" ) exec "normal o".s:endCommentTag endif @@ -513,12 +357,12 @@ function! DoxygenUndocumentFunc(blockTag) exec "normal gg" while ( search(l:search, 'W') != 0 ) - exec "normal O#ifndef " . g:DoxygenToolkit_undocTag + exec "normal O#ifndef " . b:DoxygenToolkit_undocTag exec "normal j^%" - if ( g:DoxygenToolkit_endCommentTag == "" ) - exec "normal o#endif // " . g:DoxygenToolkit_undocTag + if ( b:DoxygenToolkit_endCommentTag == "" ) + exec "normal o#endif // " . b:DoxygenToolkit_undocTag else - exec "normal o#endif /* " . g:DoxygenToolkit_undocTag . " */" + exec "normal o#endif /* " . b:DoxygenToolkit_undocTag . " */" endif endwhile @@ -535,7 +379,7 @@ function! DoxygenBlockFunc() call s:InitializeParameters() let l:insertionMode = s:StartDocumentationBlock() - exec "normal ".l:insertionMode.s:interCommentTag.g:DoxygenToolkit_blockTag + exec "normal ".l:insertionMode.s:interCommentTag.b:DoxygenToolkit_blockTag mark d exec "normal o".s:interCommentTag."@{ ".s:endCommentTag exec "normal o".strpart( s:startCommentTag, 0, 1 ) @@ -605,7 +449,7 @@ function! DoxygenCommentFunc() endif " Remove unwanted lines (ie: jump to the first significant line) - if( g:DoxygenToolkit_keepEmptyLineAfterComment == "no" ) + if( b:DoxygenToolkit_keepEmptyLineAfterComment == "no" ) " This erase previous mark mark d endif @@ -616,7 +460,7 @@ function! DoxygenCommentFunc() let l:count = 0 let l:throwCompleted = 0 let l:endReadPattern = l:endDocPattern - while( l:endDocFound == 0 && l:count < g:DoxygenToolkit_maxFunctionProtoLines ) + while( l:endDocFound == 0 && l:count < b:DoxygenToolkit_maxFunctionProtoLines ) let l:lineBuffer = s:RemoveComments( l:lineBuffer ) " Valid only for cpp. For Python it must be 'class ...:' or 'def ...:' or " '... EOL'. @@ -712,7 +556,7 @@ function! DoxygenCommentFunc() endif " Remove the function/class/... name when it is not necessary - if( ( l:doc.type == "class" && g:DoxygenToolkit_briefTag_className != "yes" ) || ( l:doc.type == "struct" && g:DoxygenToolkit_briefTag_structName != "yes" ) || ( l:doc.type == "enum" && g:DoxygenToolkit_briefTag_enumName != "yes" ) || ( l:doc.type == "namespace" && g:DoxygenToolkit_briefTag_namespaceName != "yes" ) || ( l:doc.type == "function" && g:DoxygenToolkit_briefTag_funcName != "yes" ) ) + if( ( l:doc.type == "class" && b:DoxygenToolkit_briefTag_className != "yes" ) || ( l:doc.type == "struct" && b:DoxygenToolkit_briefTag_structName != "yes" ) || ( l:doc.type == "enum" && b:DoxygenToolkit_briefTag_enumName != "yes" ) || ( l:doc.type == "namespace" && b:DoxygenToolkit_briefTag_namespaceName != "yes" ) || ( l:doc.type == "function" && b:DoxygenToolkit_briefTag_funcName != "yes" ) ) let l:doc.name = "None" " Remove namespace from the name of the class/function... @@ -724,38 +568,38 @@ function! DoxygenCommentFunc() """"""""""""""""""""""""""""""""" call s:InitializeParameters() - if( s:CheckFileType() == "python" && l:doc.type == "function" && g:DoxygenToolkit_python_autoFunctionReturn == "yes" ) + if( s:CheckFileType() == "python" && l:doc.type == "function" && b:DoxygenToolkit_python_autoFunctionReturn == "yes" ) let l:doc.returns = "yes" endif " Header exec "normal `d" - if( g:DoxygenToolkit_blockHeader != "" ) + if( b:DoxygenToolkit_blockHeader != "" ) exec "normal O".strpart( s:startCommentBlock, 0, 1 ) - exec "normal A".strpart( s:startCommentBlock, 1 ).g:DoxygenToolkit_blockHeader.s:endCommentBlock + exec "normal A".strpart( s:startCommentBlock, 1 ).b:DoxygenToolkit_blockHeader.s:endCommentBlock exec "normal `d" endif " Brief - if( g:DoxygenToolkit_compactOneLineDoc =~ "yes" && l:doc.returns != "yes" && len( l:doc.params ) == 0 ) + if( b:DoxygenToolkit_compactOneLineDoc =~ "yes" && l:doc.returns != "yes" && len( l:doc.params ) == 0 ) let s:compactOneLineDoc = "yes" exec "normal O".strpart( s:startCommentTag, 0, 1 ) - exec "normal A".strpart( s:startCommentTag, 1 ).g:DoxygenToolkit_briefTag_pre + exec "normal A".strpart( s:startCommentTag, 1 ).b:DoxygenToolkit_briefTag_pre else let s:compactOneLineDoc = "no" let l:insertionMode = s:StartDocumentationBlock() - exec "normal ".l:insertionMode.s:interCommentTag.g:DoxygenToolkit_briefTag_pre + exec "normal ".l:insertionMode.s:interCommentTag.b:DoxygenToolkit_briefTag_pre endif if( l:doc.name != "None" ) exec "normal A".l:doc.name." " endif - exec "normal A".g:DoxygenToolkit_briefTag_post + exec "normal A".b:DoxygenToolkit_briefTag_post " Mark the line where the cursor will be positionned. mark d " Arguments/parameters - if( g:DoxygenToolkit_compactDoc =~ "yes" ) + if( b:DoxygenToolkit_compactDoc =~ "yes" ) let s:insertEmptyLine = 0 else let s:insertEmptyLine = 1 @@ -765,27 +609,27 @@ function! DoxygenCommentFunc() exec "normal o".substitute( s:interCommentTag, "[[:blank:]]*$", "", "" ) let s:insertEmptyLine = 0 endif - exec "normal o".s:interCommentTag.g:DoxygenToolkit_templateParamTag_pre.param.g:DoxygenToolkit_templateParamTag_post + exec "normal o".s:interCommentTag.b:DoxygenToolkit_templateParamTag_pre.param.b:DoxygenToolkit_templateParamTag_post endfor for param in l:doc.params if( s:insertEmptyLine == 1 ) exec "normal o".substitute( s:interCommentTag, "[[:blank:]]*$", "", "" ) let s:insertEmptyLine = 0 endif - exec "normal o".s:interCommentTag.g:DoxygenToolkit_paramTag_pre.param.g:DoxygenToolkit_paramTag_post + exec "normal o".s:interCommentTag.b:DoxygenToolkit_paramTag_pre.param.b:DoxygenToolkit_paramTag_post endfor " Returned value if( l:doc.returns == "yes" ) - if( g:DoxygenToolkit_compactDoc != "yes" ) + if( b:DoxygenToolkit_compactDoc != "yes" ) exec "normal o".substitute( s:interCommentTag, "[[:blank:]]*$", "", "" ) endif - exec "normal o".s:interCommentTag.g:DoxygenToolkit_returnTag + exec "normal o".s:interCommentTag.b:DoxygenToolkit_returnTag endif " Exception (throw) values (cpp only) if( len( l:doc.throws ) > 0 ) - if( g:DoxygenToolkit_compactDoc =~ "yes" ) + if( b:DoxygenToolkit_compactDoc =~ "yes" ) let s:insertEmptyLine = 0 else let s:insertEmptyLine = 1 @@ -795,7 +639,7 @@ function! DoxygenCommentFunc() exec "normal o".substitute( s:interCommentTag, "[[:blank:]]*$", "", "" ) let s:insertEmptyLine = 0 endif - exec "normal o".s:interCommentTag.g:DoxygenToolkit_throwTag_pre.param.g:DoxygenToolkit_throwTag_post + exec "normal o".s:interCommentTag.b:DoxygenToolkit_throwTag_pre.param.b:DoxygenToolkit_throwTag_post endfor endif @@ -812,9 +656,9 @@ function! DoxygenCommentFunc() endif " Footer - if ( g:DoxygenToolkit_blockFooter != "" ) + if ( b:DoxygenToolkit_blockFooter != "" ) exec "normal o".strpart( s:startCommentBlock, 0, 1 ) - exec "normal A".strpart( s:startCommentBlock, 1 ).g:DoxygenToolkit_blockFooter.s:endCommentBlock + exec "normal A".strpart( s:startCommentBlock, 1 ).b:DoxygenToolkit_blockFooter.s:endCommentBlock endif exec "normal `d" @@ -921,7 +765,7 @@ function! s:ParseFunctionParameters( lineBuffer, doc ) if( s:CheckFileType() == "cpp" ) let l:functionBuffer = strpart( a:lineBuffer, 0, l:paramPosition ) " Remove unnecessary elements - for ignored in g:DoxygenToolkit_ignoreForReturn + for ignored in b:DoxygenToolkit_ignoreForReturn let l:functionBuffer = substitute( l:functionBuffer, '\<'.ignored.'\>', '', 'g' ) endfor let l:functionReturnAndName = split( l:functionBuffer, '[[:blank:]*]' ) @@ -983,7 +827,7 @@ function! s:ParseFunctionParameters( lineBuffer, doc ) if( s:CheckFileType() == "cpp" ) call filter( l:params, 'v:val !~ "void"' ) else - if( g:DoxygenToolkit_python_autoRemoveSelfParam == "yes" ) + if( b:DoxygenToolkit_python_autoRemoveSelfParam == "yes" ) call filter( l:params, 'v:val !~ "self"' ) endif endif @@ -1074,27 +918,185 @@ endfunction " Define start/end documentation format and backup generic parameters. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" function! s:InitializeParameters() - if( s:CheckFileType() == "cpp" ) - let s:startCommentTag = g:DoxygenToolkit_startCommentTag - let s:interCommentTag = g:DoxygenToolkit_interCommentTag - let s:endCommentTag = g:DoxygenToolkit_endCommentTag - let s:startCommentBlock = g:DoxygenToolkit_startCommentBlock - let s:interCommentBlock = g:DoxygenToolkit_interCommentBlock - let s:endCommentBlock = g:DoxygenToolkit_endCommentBlock - else + + " Common standard constants + if !exists("b:DoxygenToolkit_briefTag_pre") + let b:DoxygenToolkit_briefTag_pre = "@brief " + endif + if !exists("b:DoxygenToolkit_briefTag_post") + let b:DoxygenToolkit_briefTag_post = "" + endif + if !exists("b:DoxygenToolkit_templateParamTag_pre") + let b:DoxygenToolkit_templateParamTag_pre = "@tparam " + endif + if !exists("b:DoxygenToolkit_templateParamTag_post") + let b:DoxygenToolkit_templateParamTag_post = "" + endif + if !exists("b:DoxygenToolkit_paramTag_pre") + let b:DoxygenToolkit_paramTag_pre = "@param " + endif + if !exists("b:DoxygenToolkit_paramTag_post") + let b:DoxygenToolkit_paramTag_post = "" + endif + if !exists("b:DoxygenToolkit_returnTag") + let b:DoxygenToolkit_returnTag = "@return " + endif + if !exists("b:DoxygenToolkit_throwTag_pre") + let b:DoxygenToolkit_throwTag_pre = "@throw " " @exception is also valid + endif + if !exists("b:DoxygenToolkit_throwTag_post") + let b:DoxygenToolkit_throwTag_post = "" + endif + if !exists("b:DoxygenToolkit_blockHeader") + let b:DoxygenToolkit_blockHeader = "" + endif + if !exists("b:DoxygenToolkit_blockFooter") + let b:DoxygenToolkit_blockFooter = "" + endif + if !exists("b:DoxygenToolkit_licenseTag") + let b:DoxygenToolkit_licenseTag = s:licenseTag + endif + if !exists("b:DoxygenToolkit_fileTag") + let b:DoxygenToolkit_fileTag = "@file " + endif + if !exists("b:DoxygenToolkit_authorTag") + let b:DoxygenToolkit_authorTag = "@author " + endif + if !exists("b:DoxygenToolkit_dateTag") + let b:DoxygenToolkit_dateTag = "@date " + endif + if !exists("b:DoxygenToolkit_versionTag") + let b:DoxygenToolkit_versionTag = "@version " + endif + if !exists("b:DoxygenToolkit_undocTag") + let b:DoxygenToolkit_undocTag = "DOX_SKIP_BLOCK" + endif + if !exists("b:DoxygenToolkit_blockTag") + let b:DoxygenToolkit_blockTag = "@name " + endif + if !exists("b:DoxygenToolkit_classTag") + let b:DoxygenToolkit_classTag = "@class " + endif + + if !exists("b:DoxygenToolkit_cinoptions") + let b:DoxygenToolkit_cinoptions = "c1C1" + endif + + " Compact documentation + " /** + " * \brief foo ---> /** \brief foo */ + " */ + if !exists("b:DoxygenToolkit_compactOneLineDoc") + let b:DoxygenToolkit_compactOneLineDoc = "no" + endif + " /** + " * \brief foo /** + " * * \brief foo + " * \param bar ---> * \param bar + " * * \return + " * \return */ + " */ + if !exists("b:DoxygenToolkit_compactDoc") + let b:DoxygenToolkit_compactDoc = "no" + endif + + " Necessary '\<' and '\>' will be added to each item of the list. + let s:ignoreForReturn = ['template', 'explicit', 'inline', 'static', 'virtual', 'void\([[:blank:]]*\*\)\@!', 'const', 'volatile', 'struct', 'extern'] + if !exists("b:DoxygenToolkit_ignoreForReturn") + let b:DoxygenToolkit_ignoreForReturn = s:ignoreForReturn[:] + else + let b:DoxygenToolkit_ignoreForReturn += s:ignoreForReturn + endif + unlet s:ignoreForReturn + + " Maximum number of lines to check for function parameters + if !exists("b:DoxygenToolkit_maxFunctionProtoLines") + let b:DoxygenToolkit_maxFunctionProtoLines = 10 + endif + + " Add name of function/class/struct... after pre brief tag if you want + if !exists("b:DoxygenToolkit_briefTag_className") + let b:DoxygenToolkit_briefTag_className = "no" + endif + if !exists("b:DoxygenToolkit_briefTag_structName") + let b:DoxygenToolkit_briefTag_structName = "no" + endif + if !exists("b:DoxygenToolkit_briefTag_enumName") + let b:DoxygenToolkit_briefTag_enumName = "no" + endif + if !exists("b:DoxygenToolkit_briefTag_namespaceName") + let b:DoxygenToolkit_briefTag_namespaceName = "no" + endif + if !exists("b:DoxygenToolkit_briefTag_funcName") + let b:DoxygenToolkit_briefTag_funcName = "no" + endif + + " Keep empty line (if any) between comment and function/class/... + if !exists("b:DoxygenToolkit_keepEmptyLineAfterComment") + let b:DoxygenToolkit_keepEmptyLineAfterComment = "no" + endif + + if( s:CheckFileType() == "python" ) + " PYTHON specific + """"""""""""""""" + " Remove automatically self parameter from function to avoid its documantation + if !exists("b:DoxygenToolkit_python_autoRemoveSelfParam") + let b:DoxygenToolkit_python_autoRemoveSelfParam = "yes" + endif + " Consider functions as if they always return something (default: yes) + if !exists("b:DoxygenToolkit_python_autoFunctionReturn") + let b:DoxygenToolkit_python_autoFunctionReturn = "yes" + endif + let s:startCommentTag = "## " let s:interCommentTag = "# " let s:endCommentTag = "" let s:startCommentBlock = "# " let s:interCommentBlock = "# " let s:endCommentBlock = "" + else + if !exists("b:DoxygenToolkit_startCommentTag ") + let b:DoxygenToolkit_startCommentTag = "/** " + let b:DoxygenToolkit_startCommentBlock = "/* " + endif + if !exists("b:DoxygenToolkit_interCommentTag ") + let b:DoxygenToolkit_interCommentTag = "* " + endif + if !exists("b:DoxygenToolkit_interCommentBlock ") + let b:DoxygenToolkit_interCommentBlock = "* " + endif + if !exists("b:DoxygenToolkit_endCommentTag ") + let b:DoxygenToolkit_endCommentTag = "*/" + let b:DoxygenToolkit_endCommentBlock = "*/" + endif + if exists("b:DoxygenToolkit_commentType") + if ( b:DoxygenToolkit_commentType == "C++" ) + let b:DoxygenToolkit_startCommentTag = "/// " + let b:DoxygenToolkit_interCommentTag = "/// " + let b:DoxygenToolkit_endCommentTag = "" + let b:DoxygenToolkit_startCommentBlock = "// " + let b:DoxygenToolkit_interCommentBlock = "// " + let b:DoxygenToolkit_endCommentBlock = "" + else + let b:DoxygenToolkit_commentType = "C" + endif + else + let b:DoxygenToolkit_commentType = "C" + endif + + let s:startCommentTag = b:DoxygenToolkit_startCommentTag + let s:interCommentTag = b:DoxygenToolkit_interCommentTag + let s:endCommentTag = b:DoxygenToolkit_endCommentTag + let s:startCommentBlock = b:DoxygenToolkit_startCommentBlock + let s:interCommentBlock = b:DoxygenToolkit_interCommentBlock + let s:endCommentBlock = b:DoxygenToolkit_endCommentBlock endif " Backup standard comment expension and indentation let s:commentsBackup = &comments let &comments = "" let s:cinoptionsBackup = &cinoptions - let &cinoptions = g:DoxygenToolkit_cinoptions + let &cinoptions = b:DoxygenToolkit_cinoptions " Compatibility with c/c++ IDE plugin let s:timeoutlenBackup = &timeoutlen let &timeoutlen = 0