r959 - in /trunk/packages/vim-scripts: debian/changelog debian/vim-scripts.status plugin/DoxygenToolkit.vim

zack at users.alioth.debian.org zack at users.alioth.debian.org
Thu Jun 21 10:37:25 UTC 2007


Author: zack
Date: Thu Jun 21 10:37:25 2007
New Revision: 959

URL: http://svn.debian.org/wsvn/pkg-vim/?sc=1&rev=959
Log:
added doxygen toolkit addon

Added:
    trunk/packages/vim-scripts/plugin/DoxygenToolkit.vim
Modified:
    trunk/packages/vim-scripts/debian/changelog
    trunk/packages/vim-scripts/debian/vim-scripts.status

Modified: trunk/packages/vim-scripts/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim-scripts/debian/changelog?rev=959&op=diff
==============================================================================
--- trunk/packages/vim-scripts/debian/changelog (original)
+++ trunk/packages/vim-scripts/debian/changelog Thu Jun 21 10:37:25 2007
@@ -4,15 +4,15 @@
   * debian/control
     - added XS-Vcs-Browser field
   * addons adds/removals/upgrades(/other changes)
-    - upgraded addons: alternate, bufexplorer, gnupg (Closes: #416011),
-      taglist, calendar, cvsmenu, vcscommand (add support for svk),
-      nerd-commenter
+    - upgraded: alternate, bufexplorer, gnupg (Closes: #416011), taglist,
+      calendar, cvsmenu, vcscommand (add support for svk), nerd-commenter
+    - added: doxygen-toolkit (Closes: #424652)
 
   [ James Vega ]
   * Fix debian/patches/disabledby-themes.dpatch to use endif instead of
     fi[nish].  (Closes: #413468)
 
- -- Stefano Zacchiroli <zack at debian.org>  Thu, 21 Jun 2007 11:24:20 +0100
+ -- Stefano Zacchiroli <zack at debian.org>  Thu, 21 Jun 2007 11:36:17 +0100
 
 vim-scripts (7.0.5) unstable; urgency=low
 

Modified: trunk/packages/vim-scripts/debian/vim-scripts.status
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim-scripts/debian/vim-scripts.status?rev=959&op=diff
==============================================================================
--- trunk/packages/vim-scripts/debian/vim-scripts.status (original)
+++ trunk/packages/vim-scripts/debian/vim-scripts.status Thu Jun 21 10:37:25 2007
@@ -287,6 +287,17 @@
 license:     GNU GPL, see /usr/share/common-licenses/GPL-2
 version:     2.0
 
+script_name: plugin/DoxygenToolkit.vim
+addon:	     doxygen-toolkit
+description: simplify writing Doxygen documentation in C/C++
+script_url:  http://www.vim.org/scripts/script.php?script_id=987
+author:      Mathias Lorente
+author_url:  http://www.vim.org/account/profile.php?user_id=5172
+email:       mathias_lorente at yahoo.fr
+license:     no license
+disabledby:  let loaded_vimplate = 1
+version:     0.1.17
+
 --
 
 Licenses referenced above

Added: trunk/packages/vim-scripts/plugin/DoxygenToolkit.vim
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim-scripts/plugin/DoxygenToolkit.vim?rev=959&op=file
==============================================================================
--- trunk/packages/vim-scripts/plugin/DoxygenToolkit.vim (added)
+++ trunk/packages/vim-scripts/plugin/DoxygenToolkit.vim Thu Jun 21 10:37:25 2007
@@ -1,0 +1,721 @@
+" DoxygenToolkit.vim
+" Brief: Usefull tools for Doxygen (comment, author, license).
+" Version: 0.1.17
+" Date: 04/15²07
+" Author: Mathias Lorente
+"
+" Note: Number of lines scanned is now configurable. Default value is still 10
+"     lines. (Thanks to Spencer Collyer for this improvement).
+"
+" Note: Bug correction : function that returns null pointer are correctly
+"     documented (Thanks to Ronald WAHL for his report and patch).
+"
+" 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
+"     anymore.
+"     Thanks to Justin RANDALL for this.
+"     Now comments are as following:
+"     /* --- My Header --- */             // --- My Header ---
+"     /**                                 /// @brief ...
+"      *  @brief ...                or    // --- My Footer ---
+"      */
+"     /* -- My Footer --- */
+"
+" Note: Changes to customize cinoptions
+"   - New option available for cinoptions : g:DoxygenToolkit_cinoptions
+"     (default value is still c1C1)
+"     Thanks to Arnaud GODET for this. Now comment can have the following
+"     look:
+"     /**                      /**
+"     *       and not only     *
+"     */                       */
+" 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
+"     the name of commented function between pre-brief tag and post-brief tag.
+"   - With these new features you can get something like:
+"     /**
+"      * @brief MyFunction -
+"      *
+"      * @param foo:
+"      * @param bar:
+"      */
+" Note: Changes suggested by Soh Kok Hong:
+"   - Fixed indentation in comments
+"     ( no more /**               /**
+"                 *       but      *
+"                 */               */     )
+" Note: Changes made by Jason Mills:
+"   - Fixed \n bug which resulted in comments being screwed up
+"   - Added use of doxygen /// comments.
+" Note: Changes made by Mathias Lorente on 05/25/04
+"   - Fixed filename bug when including doxygen author comment whereas file
+"     has not been open directly on commamd line.
+"   - Now /// or /** doxygen comments are correctly integrated (except for
+"     license).
+" Note: Changes made by Mathias Lorente on 08/02/04
+"   - Now include only filename in author comment (no more folder...)
+"   - Fixed errors with function with no indentation.
+"
+"
+" Actually five purposes have been defined :
+"
+" Generates a doxygen license comment.  The tag text is configurable.
+"
+" Generates a doxygen author skeleton.  The tag text is configurable.
+"
+" Generates a doxygen comment skeleton for a C, C++, or Java function or class,
+" including @brief, @param (for each named argument), and @return.  The tag
+" text as well as a comment block header and footer are configurable.
+" (Consequently, you can have \brief, etc. if you wish, with little effort.)
+" 
+" Ignore code fragment placed in a block defined by #ifdef ... #endif.  The
+" block name must be given to the function.  All of the corresponding blocks
+" in all the file will be treated and placed in a new block DOX_SKIP_BLOCK (or
+" any other name that you have configured).  Then you have to update
+" PREDEFINED value in your doxygen configuration file with correct block name.
+" You also have to set ENABLE_PREPROCESSING to YES.
+" 
+" Generate a doxygen group (begining and ending). The tag text is
+" configurable.
+"
+" Use:
+" - Type of comments ( /// or /** ... */ ) :
+"   In vim, default comments are : /** ... */. But if you prefer to use ///
+"   Doxygen comments just add 'let g:DoxygenToolkit_commentType = "C++"'
+"   (without quotes) in your .vimrc file
+"
+" - License :
+"   In vim, place the cursor on the line that will follow doxygen license
+"   comment.  Then, execute the command :DoxLic.  This will generate license
+"   comment and leave the cursor on the line just after.
+"
+" - Author :
+"   In vim, place the cursor on the line that will follow doxygen author
+"   comment.  Then, execute the command :DoxAuthor.  This will generate the
+"   skeleton and leave the cursor just after @author tag if no variable
+"   define it, or just after the skeleton.
+"
+" - Function / class comment :
+"   In vim, place the cursor on the line of the function header (or returned
+"   value of the function) or the class.  Then execute the command :Dox.  This
+"   will generate the skeleton and leave the cursor after the @brief tag.
+"
+" - Ignore code fragment :
+"   In vim, if you want to ignore all code fragment placed in a block such as :
+"     #ifdef DEBUG
+"     ...
+"     #endif
+"   You only have to execute the command :DoxUndoc(DEBUG) !
+"   
+" - Group :
+"   In vim, execute the command :DoxBlock to insert a doxygen block on the
+"   following line.
+"
+" Limitations:
+" - Assumes that the function name (and the following opening parenthesis) is
+"   at least on the third line after current cursor position.
+" - Not able to update a comment block after it's been written.
+" - Blocks delimiters (header and footer) are only included for function
+"   comment.
+" - Assumes that cindent is used. 
+"
+"
+" Example:
+" Given:
+" int
+"   foo(char mychar,
+"       int myint,
+"       double* myarray,
+"       int mask = DEFAULT)
+" { //...
+" }
+"
+" Issuing the :Dox command with the cursor on the function declaration would
+" generate
+" 
+" /**
+" * @brief
+" *
+" * @param mychar
+" * @param myint
+" * @param myarray
+" * @param mask
+" *
+" * @return
+" */
+"
+"
+" To customize the output of the script, see the g: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\<enter>"   <-- Do not forget
+" ending "\<enter>"
+
+
+" Verify if already loaded
+if exists("loaded_DoxygenToolkit")
+	"echo 'DoxygenToolkit Already Loaded.'
+	finish
+endif
+let loaded_DoxygenToolkit = 1
+"echo 'Loading DoxygenToolkit...'
+let s:licenseTag = "Copyright (C) \<enter>"
+let s:licenseTag = s:licenseTag . "This program is free software; you can redistribute it and/or\<enter>"
+let s:licenseTag = s:licenseTag . "modify it under the terms of the GNU General Public License\<enter>"
+let s:licenseTag = s:licenseTag . "as published by the Free Software Foundation; either version 2\<enter>"
+let s:licenseTag = s:licenseTag . "of the License, or (at your option) any later version.\<enter>\<enter>"
+let s:licenseTag = s:licenseTag . "This program is distributed in the hope that it will be useful,\<enter>"
+let s:licenseTag = s:licenseTag . "but WITHOUT ANY WARRANTY; without even the implied warranty of\<enter>"
+let s:licenseTag = s:licenseTag . "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\<enter>"
+let s:licenseTag = s:licenseTag . "GNU General Public License for more details.\<enter>\<enter>"
+let s:licenseTag = s:licenseTag . "You should have received a copy of the GNU General Public License\<enter>"
+let s:licenseTag = s:licenseTag . "along with this program; if not, write to the Free Software\<enter>"
+let s:licenseTag = s:licenseTag . "Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.\<enter>"
+
+" 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_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_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_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_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_endCommentBlock = ""
+	endif
+else
+	let g:DoxygenToolkit_commentType = "C"
+endif
+
+if !exists("g:DoxygenToolkit_ignoreForReturn")
+	let g:DoxygenToolkit_ignoreForReturn = "inline static virtual void"
+else
+	let g:DoxygenToolkit_ignoreForReturn = g:DoxygenToolkit_ignoreForReturn . " inline static virtual void"
+endif
+
+" Maximum number of lines to check for function parameters
+if !exists("g:DoxygenToolkit_maxFunctionProtoLines")
+	let g:DoxygenToolkit_maxFunctionProtoLines = 10
+endif
+
+" Add name of function after pre brief tag if you want
+if !exists("g:DoxygenToolkit_briefTag_funcName")
+	let g:DoxygenToolkit_briefTag_funcName = "no"
+endif
+
+
+""""""""""""""""""""""""""
+" Doxygen comment function 
+""""""""""""""""""""""""""
+function! <SID>DoxygenCommentFunc()
+	" Store indentation
+	let l:oldcinoptions = &cinoptions
+	" Set new indentation
+	let &cinoptions=g:DoxygenToolkit_cinoptions
+	
+	let l:argBegin = "\("
+	let l:argEnd = "\)"
+	let l:argSep = ','
+	let l:sep = "\ "
+	let l:voidStr = "void"
+
+	let l:classDef = 0
+
+	" Save standard comment expension
+	let l:oldComments = &comments
+	let &comments = ""
+
+	" Store function in a buffer
+	let l:lineBuffer = getline(line("."))
+	mark d
+	let l:count=1
+	" Return of function can be defined on other line than the one of the 
+	" function.
+	while ( l:lineBuffer !~ l:argBegin && l:count < 4 )
+		" This is probbly a class (or something else definition)
+		if ( l:lineBuffer =~ "{" || l:lineBuffer =~ ";" )
+			let l:classDef = 1
+			break
+		endif
+		exec "normal j"
+		let l:line = getline(line("."))
+		let l:lineBuffer = l:lineBuffer . ' ' . l:line
+		let l:count = l:count + 1
+	endwhile
+	if ( l:classDef == 0 )
+		if ( l:count == 4 )
+			" Restore standard comment expension
+			let &comments = l:oldComments 
+			" Restore indentation
+			let &cinoptions = l:oldcinoptions
+			return
+		endif
+		" Get the entire function
+		let l:count = 0
+		while ( l:lineBuffer !~ l:argEnd && l:count < g:DoxygenToolkit_maxFunctionProtoLines )
+			exec "normal j"
+			let l:line = getline(line("."))
+			let l:lineBuffer = l:lineBuffer . ' ' . l:line
+			let l:count = l:count + 1
+		endwhile
+		" Function definition seem to be too long...
+		if ( l:count == g:DoxygenToolkit_maxFunctionProtoLines )
+			" Restore standard comment expension
+			let &comments = l:oldComments 
+			" Restore indentation
+			let &cinoptions = l:oldcinoptions
+			return
+		endif
+	endif
+
+	" Start creating doxygen pattern
+	exec "normal `d" 
+	if ( g:DoxygenToolkit_blockHeader != "" )
+		exec "normal O" . g:DoxygenToolkit_startCommentBlock . g:DoxygenToolkit_blockHeader . g:DoxygenToolkit_endCommentBlock
+		exec "normal o" . g:DoxygenToolkit_startCommentTag . g:DoxygenToolkit_briefTag_pre
+	else
+		if ( g:DoxygenToolkit_commentType == "C++" )
+			exec "normal O" . g:DoxygenToolkit_startCommentTag . g:DoxygenToolkit_briefTag_pre
+		else
+			exec "normal O" . g:DoxygenToolkit_startCommentTag
+			exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_briefTag_pre
+		endif
+	endif
+	mark d
+	if ( g:DoxygenToolkit_endCommentTag != "" )
+		exec "normal o" . g:DoxygenToolkit_endCommentTag
+	endif
+	if ( g:DoxygenToolkit_blockFooter != "" )
+		exec "normal o" . g:DoxygenToolkit_startCommentBlock . g:DoxygenToolkit_blockFooter . g:DoxygenToolkit_endCommentBlock
+	endif
+	exec "normal `d"
+
+	" Class definition, let's start with brief tag
+	if ( l:classDef == 1 )
+		" Restore standard comment expension
+		let &comments = l:oldComments 
+		" Restore indentation
+		let &cinoptions = l:oldcinoptions
+
+		startinsert!
+		return
+	endif
+
+	" Replace tabs by space
+	let l:lineBuffer = substitute(l:lineBuffer, "\t", "\ ", "g")
+
+	" Delete recursively all double spaces
+	while ( match(l:lineBuffer, "\ \ ") != -1 )
+		let l:lineBuffer = substitute(l:lineBuffer, "\ \ ", "\ ", "g")
+	endwhile
+
+	" Delete space just after and just before parenthesis
+	" Remove space between function name and opening paenthesis
+	let l:lineBuffer = substitute(l:lineBuffer, "(\ ", "(", "")
+	let l:lineBuffer = substitute(l:lineBuffer, "\ )", ")", "")
+	let l:lineBuffer = substitute(l:lineBuffer, "\ (", "(", "")
+
+	" Delete first space (if any)
+	if ( match(l:lineBuffer, ' ') == 0 )
+		let l:lineBuffer = strpart(l:lineBuffer, 1)
+	endif
+
+	" Add function name if requiered
+	if ( g:DoxygenToolkit_briefTag_funcName =~ "yes" )
+		let l:beginP = 0
+		let l:currentP = -1
+		let l:endP = match( l:lineBuffer, l:argBegin )
+		while ( l:currentP < l:endP )
+			let l:beginP = l:currentP + 1
+			let l:currentP = match( l:lineBuffer, '[&*[:space:]]', l:beginP )
+			if ( l:currentP == -1 )
+				let l:currentP = l:endP
+			endif
+		endwhile
+		let l:name = strpart( l:lineBuffer, l:beginP, l:endP - l:beginP )
+		exec "normal A" . l:name
+	endif
+
+	" Now can add brief post tag
+	exec "normal A" . g:DoxygenToolkit_briefTag_post
+
+	" Add return tag if function do not return void
+	let l:beginArgPos = match(l:lineBuffer, l:argBegin)
+	let l:beginP = 0	" Name can start at the beginning of l:lineBuffer, it is usually between whitespaces or space and parenthesis
+	let l:endP = 0
+	let l:returnFlag = -1	" At least one name (function name) do not correspond to the list of ignored values.
+	while ( l:endP != l:beginArgPos )
+		" look for  * or & (pointer or reference)
+		let l:endP = match(l:lineBuffer, '[&*]', l:beginP )
+		if ( l:endP > l:beginArgPos || l:endP == -1 )
+			" not found --> look for whitespace
+			let l:endP = match(l:lineBuffer, '\s', l:beginP )
+			if ( l:endP > l:beginArgPos || l:endP == -1 )
+				let l:endP = l:beginArgPos
+			endif
+		else
+			" found * or & -- so we have a return value
+			let l:returnFlag = l:returnFlag + 1
+		endif
+		let l:name = strpart(l:lineBuffer, l:beginP, l:endP - l:beginP)
+		let l:beginP = l:endP + 1
+		" Hack, because of '~' is not correctly interprated by match... if you
+		" have a solution, send me it !
+		if ( l:name[0] != '~' && matchstr(g:DoxygenToolkit_ignoreForReturn, "\\<" . l:name . "\\>") != l:name )
+			let l:returnFlag = l:returnFlag + 1
+		endif
+	endwhile
+	if ( l:returnFlag >= 1 )	
+		exec "normal o" . g:DoxygenToolkit_interCommentTag
+		exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_returnTag
+	endif
+
+	" Looking for argument name in line buffer
+	exec "normal `d"
+	let l:argList = 0    " ==0 -> no argument, !=0 -> at least one arg
+
+	let l:beginP = 0
+	let l:endP = 0
+	let l:prevBeginP = 0
+
+	" Arguments start after opening parenthesis
+	let l:beginP = match(l:lineBuffer, l:argBegin, l:beginP) + 1
+	let l:prevBeginP = l:beginP
+	let l:endP = l:beginP
+
+	" Test if there is something into parenthesis
+	let l:beginP = l:beginP
+	if ( l:beginP == match(l:lineBuffer, l:argEnd, l:beginP) )
+		" Restore standard comment expension
+		let &comments = l:oldComments 
+		" Restore indentation
+		let &cinoptions = l:oldcinoptions
+
+		startinsert!
+		return
+	endif
+
+	" Enter into main loop
+	while ( l:beginP > 0 && l:endP > 0 )
+
+		" Looking for arg separator
+		let l:endP1 = match(l:lineBuffer, l:argSep, l:beginP)
+		let l:endP = match(l:lineBuffer, l:argEnd, l:beginP)
+		if ( l:endP1 != -1 && l:endP1 < l:endP )
+			let l:endP = l:endP1
+		endif
+		let l:endP = l:endP - 1
+
+		if ( l:endP > 0 )
+			let l:strBuf = ReturnArgName(l:lineBuffer, l:beginP, l:endP)
+			" void parameter
+			if ( l:strBuf == l:voidStr )
+				" Restore standard comment expension
+				let &comments = l:oldComments 
+				" Restore indentation
+				let &cinoptions = l:oldcinoptions
+				
+				startinsert!
+				break
+			endif
+			exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_paramTag_pre . l:strBuf . g:DoxygenToolkit_paramTag_post
+			let l:beginP = l:endP + 2
+			let l:argList = 1
+		endif
+	endwhile
+
+	" Add blank line if necessary
+	if ( l:argList != 0 )
+		exec "normal `do" . g:DoxygenToolkit_interCommentTag
+	endif
+
+	" move the cursor to the correct position (after brief tag)
+	exec "normal `d"
+	 
+	" Restore standard comment expension
+	let &comments = l:oldComments 
+	" Restore indentation
+	let &cinoptions = l:oldcinoptions
+
+	startinsert!
+endfunction
+
+
+""""""""""""""""""""""""""
+" Doxygen license comment
+""""""""""""""""""""""""""
+function! <SID>DoxygenLicenseFunc()
+	" Store indentation
+	let l:oldcinoptions = &cinoptions
+	" Set new indentation
+	let &cinoptions=g:DoxygenToolkit_cinoptions
+
+	" Test authorName variable
+	if !exists("g:DoxygenToolkit_authorName")
+		let g:DoxygenToolkit_authorName = input("Enter name of the author (generally yours...) : ")
+	endif
+	mark d
+	let l:date = strftime("%Y")
+	exec "normal O/*\<Enter>" . g:DoxygenToolkit_licenseTag
+	exec "normal ^c$*/"
+	if ( g:DoxygenToolkit_licenseTag == s:licenseTag )
+		exec "normal %jA" . l:date . " - " . g:DoxygenToolkit_authorName
+	endif
+	exec "normal `d"
+
+	" Restore indentation
+	let &cinoptions = l:oldcinoptions
+endfunction
+
+
+""""""""""""""""""""""""""
+" Doxygen author comment
+""""""""""""""""""""""""""
+function! <SID>DoxygenAuthorFunc()
+	" Save standard comment expension
+	let l:oldComments = &comments
+	let &comments = ""
+	" Store indentation
+	let l:oldcinoptions = &cinoptions
+	" Set new indentation
+	let &cinoptions=g:DoxygenToolkit_cinoptions
+
+	" Test authorName variable
+	if !exists("g:DoxygenToolkit_authorName")
+		let g:DoxygenToolkit_authorName = input("Enter name of the author (generally yours...) : ")
+	endif
+
+	" Get file name
+	let l:fileName = expand('%:t')
+
+	" Begin to write skeleton
+	exec "normal O" . g:DoxygenToolkit_startCommentTag
+	exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_fileTag . l:fileName
+	exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_briefTag_pre
+	mark d
+	exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_authorTag . g:DoxygenToolkit_authorName
+	let l:date = strftime("%Y-%m-%d")
+	exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_dateTag . l:date
+	if ( g:DoxygenToolkit_endCommentTag == "" )
+		exec "normal o" . g:DoxygenToolkit_interCommentTag
+	else
+		exec "normal o" . g:DoxygenToolkit_endCommentTag
+	endif
+
+	" Replace the cursor to the rigth position
+	exec "normal `d"
+
+	" Restore standard comment expension
+	let &comments = l:oldComments
+	" Restore indentation
+	let &cinoptions = l:oldcinoptions
+	startinsert!
+endfunction
+
+
+""""""""""""""""""""""""""
+" Doxygen undocument function
+""""""""""""""""""""""""""
+function! <SID>DoxygenUndocumentFunc(blockTag)
+	let l:search = "#ifdef " . a:blockTag
+	" Save cursor position and go to the begining of the file
+	mark d
+	exec "normal gg"
+
+	while ( search(l:search, 'W') != 0 )
+		exec "normal O#ifndef " . g:DoxygenToolkit_undocTag
+		exec "normal j^%"
+		if ( g:DoxygenToolkit_endCommentTag == "" )
+			exec "normal o#endif // " . g:DoxygenToolkit_undocTag 
+		else
+			exec "normal o#endif /* " . g:DoxygenToolkit_undocTag . " */"
+		endif
+	endwhile
+
+	exec "normal `d"
+endfunction
+
+
+
+""""""""""""""""""""""""""
+" DoxygenBlockFunc
+""""""""""""""""""""""""""
+function! <SID>DoxygenBlockFunc()
+	" Save standard comment expension
+	let l:oldComments = &comments
+	let &comments = ""
+	" Store indentation
+	let l:oldcinoptions = &cinoptions
+	" Set new indentation
+	let &cinoptions=g:DoxygenToolkit_cinoptions
+
+	exec "normal o" . g:DoxygenToolkit_startCommentTag
+	exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_blockTag
+	mark d
+	exec "normal o" . g:DoxygenToolkit_interCommentTag . "@{ " . g:DoxygenToolkit_endCommentTag
+	exec "normal o" . g:DoxygenToolkit_startCommentTag . " @} " . g:DoxygenToolkit_endCommentTag
+	exec "normal `d"
+	
+	" Restore standard comment expension
+	let &comments = l:oldComments
+	" Restore indentation
+	let &cinoptions = l:oldcinoptions
+	startinsert!
+endfunction
+
+
+"function! AppendText(text)
+"	call append(line("."), a:text)
+"	exec "normal j" 
+"endfunction
+
+"
+" Returns the indentations level for a line
+" MakeIndent([lineNum])
+"
+"function! MakeIndent(...)
+"	let line = getline(".")
+"	if a:0 == 1 
+"		let line = getline(a:1)
+"	endif
+"	return matchstr(line, '^\s*')
+"endfunction
+
+""""""""""""""""""""""""""
+" Extract the name of argument
+""""""""""""""""""""""""""
+function ReturnArgName(argBuf, beginP, endP)
+
+	" Name of argument is at the end of argBuf if no default (id arg = 0)
+	let l:equalP = match(a:argBuf, "=", a:beginP)
+	if ( l:equalP == -1 || l:equalP > a:endP )
+		" Look for arg name begining
+		let l:beginP = a:beginP 
+		let l:prevBeginP = l:beginP
+		while ( l:beginP < a:endP && l:beginP != -1 )
+			let l:prevBeginP = l:beginP
+			let l:beginP = match(a:argBuf, " ", l:beginP + 1)
+		endwhile
+		let l:beginP = l:prevBeginP
+		let l:endP = a:endP
+	else
+		" Look for arg name begining
+		let l:addPos = 0
+		let l:beginP = a:beginP
+		let l:prevBeginP = l:beginP
+		let l:doublePrevBeginP = l:prevBeginP
+		while ( l:beginP < l:equalP && l:beginP != -1 )
+			let l:doublePrevBeginP = l:prevBeginP
+			let l:prevBeginP = l:beginP + l:addPos
+			let l:beginP = match(a:argBuf, " ", l:beginP + 1)
+			let l:addPos = 1
+		endwhile
+
+		" Space just before equal
+		if ( l:prevBeginP == l:equalP )
+			let l:beginP = l:doublePrevBeginP
+			let l:endP = l:prevBeginP - 2
+		else
+			" No space just before so...
+			let l:beginP = l:prevBeginP
+			let l:endP = l:equalP - 1
+		endif
+	endif
+
+	" We have the begining position and the ending position...
+	let l:newBuf = strpart(a:argBuf, l:beginP, l:endP - l:beginP + 1)
+
+	" Delete leading '*' or '&'
+	if ( match(l:newBuf, "*") == 1 || match(l:newBuf, "&") == 1 )
+		let l:newBuf = strpart(l:newBuf, 2)
+	endif
+
+	" Delete tab definition ([])
+	let l:delTab = match(newBuf, "[") 
+	if ( l:delTab != -1 )
+		let l:newBuf = strpart(l:newBuf, 0, l:delTab)
+	endif
+
+	" Eventually clean argument name...
+	let l:newBuf = substitute(l:newBuf, " ", "", "g")
+	return l:newBuf
+
+endfunction
+
+
+
+""""""""""""""""""""""""""
+" Shortcuts...
+""""""""""""""""""""""""""
+command! -nargs=0 Dox :call <SID>DoxygenCommentFunc()
+command! -nargs=0 DoxLic :call <SID>DoxygenLicenseFunc()
+command! -nargs=0 DoxAuthor :call <SID>DoxygenAuthorFunc()
+command! -nargs=1 DoxUndoc :call <SID>DoxygenUndocumentFunc(<q-args>)
+command! -nargs=0 DoxBlock :call <SID>DoxygenBlockFunc()




More information about the pkg-vim-maintainers mailing list