Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

inital import. Fork of VIP. Cleaned up and organized. Kept only the P…

…HP related items
  • Loading branch information...
commit 6df07c1f29249d86763727f733830038512eaffb 0 parents
@spf13 authored
Showing with 703 additions and 0 deletions.
  1. +201 −0 ftplugin/php.vim
  2. +502 −0 plugin/php-doc.vim
201 ftplugin/php.vim
@@ -0,0 +1,201 @@
+" .vim/ftplugin/php.vim by Tobias Schlitt <toby@php.net>.
+" No copyright, feel free to use this, as you like.
+" Revised 2010 Steve Francia <http://spf13.com>
+
+" Including PDV
+source ~/.vim/plugin/php-doc.vim
+
+let PHP_autoformatcomment = 1
+
+" {{{ Settings
+
+" Auto expand tabs to spaces
+" setlocal expandtab
+
+" Auto indent after a {
+setlocal autoindent
+setlocal smartindent
+
+" Linewidth to 79, because of the formatoptions this is only valid for
+" comments
+setlocal textwidth=79
+set formatoptions=qrocb
+
+" Do not wrap lines automatically
+setlocal nowrap
+
+" Correct indentation after opening a phpdocblock and automatic * on every
+" line
+setlocal formatoptions=qroct
+
+" Use php syntax check when doing :make
+setlocal makeprg=php\ -l\ %
+
+" Use errorformat for parsing PHP error output
+setlocal errorformat=%m\ in\ %f\ on\ line\ %l
+
+" Switch syntax highlighting on, if it was not
+syntax on
+
+" Use pman for manual pages
+setlocal keywordprg=pman
+
+" }}} Settings
+
+" {{{ Command mappings
+
+" Map ; to run PHP parser check
+" noremap ; :!php5 -l %<CR>
+
+" Map ; to "add ; to the end of the line, when missing"
+noremap <buffer> ; :s/\([^;]\)$/\1;/<cr>
+
+" DEPRECATED in favor of PDV documentation (see below!)
+" Map <CTRL>-P to run actual file with PHP CLI
+" noremap <C-P> :w!<CR>:!php5 %<CR>
+
+" Map <ctrl>+p to single line mode documentation (in insert and command mode)
+inoremap <buffer> <C-P> :call PhpDocSingle()<CR>i
+nnoremap <buffer> <C-P> :call PhpDocSingle()<CR>
+" Map <ctrl>+p to multi line mode documentation (in visual mode)
+vnoremap <buffer> <C-P> :call PhpDocRange()<CR>
+
+" Map <CTRL>-H to search phpm for the function name currently under the cursor (insert mode only)
+inoremap <buffer> <C-H> <ESC>:!phpm <C-R>=expand("<cword>")<CR><CR>
+
+" Map <CTRL>-a to alignment function
+vnoremap <buffer> <C-a> :call PhpAlign()<CR>
+
+" Map <CTRL>-c to (un-)comment function
+"vnoremap <buffer> <C-c> :call PhpUnComment()<CR>
+" Use NERDCommenter, it's much better
+
+" }}}
+
+" {{{ Automatic close char mapping
+
+" More common in PEAR coding standard
+" inoremap <buffer> { {<CR>}<C-O>O
+" Maybe this way in other coding standards
+inoremap { {<CR>}<C-O>O
+
+inoremap <buffer> [ []<LEFT>
+
+" Standard mapping after PEAR coding standard
+" inoremap <buffer> ( ( )<LEFT><LEFT>
+
+" Maybe this way in other coding standards
+inoremap ( ( )<LEFT><LEFT>
+
+inoremap <buffer> " ""<LEFT>
+inoremap <buffer> ' ''<LEFT>
+
+" }}} Automatic close char mapping
+
+" {{{ Wrap visual selections with chars
+
+:vnoremap <buffer> ( "zdi(<C-R>z)<ESC>
+:vnoremap <buffer> { "zdi{<C-R>z}<ESC>
+:vnoremap <buffer> [ "zdi[<C-R>z]<ESC>
+:vnoremap <buffer> ' "zdi'<C-R>z'<ESC>
+" Removed in favor of register addressing
+" :vnoremap " "zdi"<C-R>z"<ESC>
+
+" }}} Wrap visual selections with chars
+
+" {{{ Dictionary completion
+
+" The completion dictionary is provided by Rasmus:
+" http://lerdorf.com/funclist.txt
+setlocal dictionary-=/home/dotxp/funclist.txt dictionary+=/home/dotxp/funclist.txt
+" Use the dictionary completion
+setlocal complete-=k complete+=k
+
+" }}} Dictionary completion
+
+" {{{ Autocompletion using the TAB key
+
+" This function determines, wether we are on the start of the line text (then tab indents) or
+" if we want to try autocompletion
+func! InsertTabWrapper()
+ let col = col('.') - 1
+ if !col || getline('.')[col - 1] !~ '\k'
+ return "\<tab>"
+ else
+ return "\<c-p>"
+ endif
+endfunction
+
+" Remap the tab key to select action with InsertTabWrapper
+inoremap <buffer> <tab> <c-r>=InsertTabWrapper()<cr>
+
+" }}} Autocompletion using the TAB key
+
+" {{{ Alignment
+
+func! PhpAlign() range
+ let l:paste = &g:paste
+ let &g:paste = 0
+
+ let l:line = a:firstline
+ let l:endline = a:lastline
+ let l:maxlength = 0
+ while l:line <= l:endline
+ " Skip comment lines
+ if getline (l:line) =~ '^\s*\/\/.*$'
+ let l:line = l:line + 1
+ continue
+ endif
+ " \{-\} matches ungreed *
+ let l:index = substitute (getline (l:line), '^\s*\(.\{-\}\)\s*\S\{0,1}=\S\{0,1\}\s.*$', '\1', "")
+ let l:indexlength = strlen (l:index)
+ let l:maxlength = l:indexlength > l:maxlength ? l:indexlength : l:maxlength
+ let l:line = l:line + 1
+ endwhile
+
+ let l:line = a:firstline
+ let l:format = "%s%-" . l:maxlength . "s %s %s"
+
+ while l:line <= l:endline
+ if getline (l:line) =~ '^\s*\/\/.*$'
+ let l:line = l:line + 1
+ continue
+ endif
+ let l:linestart = substitute (getline (l:line), '^\(\s*\).*', '\1', "")
+ let l:linekey = substitute (getline (l:line), '^\s*\(.\{-\}\)\s*\(\S\{0,1}=\S\{0,1\}\)\s\(.*\)$', '\1', "")
+ let l:linesep = substitute (getline (l:line), '^\s*\(.\{-\}\)\s*\(\S\{0,1}=\S\{0,1\}\)\s\(.*\)$', '\2', "")
+ let l:linevalue = substitute (getline (l:line), '^\s*\(.\{-\}\)\s*\(\S\{0,1}=\S\{0,1\}\)\s\(.*\)$', '\3', "")
+
+ let l:newline = printf (l:format, l:linestart, l:linekey, l:linesep, l:linevalue)
+ call setline (l:line, l:newline)
+ let l:line = l:line + 1
+ endwhile
+ let &g:paste = l:paste
+endfunc
+
+" }}}
+
+" {{{ (Un-)comment
+
+" Use NERDCommenter, it's much better
+"func! PhpUnComment() range
+ "let l:paste = &g:paste
+ "let &g:paste = 0
+
+ "let l:line = a:firstline
+ "let l:endline = a:lastline
+
+ "while l:line <= l:endline
+ "if getline (l:line) =~ '^\s*\/\/.*$'
+ "let l:newline = substitute (getline (l:line), '^\(\s*\)\/\/ \(.*\).*$', '\1\2', '')
+ "else
+ "let l:newline = substitute (getline (l:line), '^\(\s*\)\(.*\)$', '\1// \2', '')
+ "endif
+ "call setline (l:line, l:newline)
+ "let l:line = l:line + 1
+ "endwhile
+
+ "let &g:paste = l:paste
+"endfunc
+
+" }}}
502 plugin/php-doc.vim
@@ -0,0 +1,502 @@
+" PDV (phpDocumentor for Vim)
+" ===========================
+"
+" Version: 1.0.0
+"
+" Copyright 2005 by Tobias Schlitt <toby@php.net>
+" Inspired by phpDoc script for Vim by Vidyut Luther (http://www.phpcult.com/).
+"
+" Provided under the GPL (http://www.gnu.org/copyleft/gpl.html).
+"
+" This script provides functions to generate phpDocumentor conform
+" documentation blocks for your PHP code. The script currently
+" documents:
+"
+" - Classes
+" - Methods/Functions
+" - Attributes
+"
+" All of those supporting all PHP 4 and 5 syntax elements.
+"
+" Beside that it allows you to define default values for phpDocumentor tags
+" like @version (I use $id$ here), @author, @license and so on.
+"
+" For function/method parameters and attributes, the script tries to guess the
+" type as good as possible from PHP5 type hints or default values (array, bool,
+" int, string...).
+"
+" You can use this script by mapping the function PhpDoc() to any
+" key combination. Hit this on the line where the element to document
+" resides and the doc block will be created directly above that line.
+"
+" Installation
+" ============
+"
+" For example include into your .vimrc:
+"
+" source ~/.vim/php-doc.vim
+" imap <C-o> :set paste<CR>:call PhpDoc()<CR>:set nopaste<CR>i
+"
+" This includes the script and maps the combination <ctrl>+o (only in
+" insert mode) to the doc function.
+"
+" Changelog
+" =========
+"
+" Version 1.0.0
+" -------------
+"
+" * Created the initial version of this script while playing around with VIM
+" scripting the first time and trying to fix Vidyut's solution, which
+" resulted in a complete rewrite.
+"
+" Version 1.1.0
+" -------------
+" * Fixed bug with call-by-reference parameters.
+"
+
+if has ("user_commands")
+
+" {{{ Globals
+
+" After phpDoc standard
+let g:pdv_cfg_CommentHead = "/**"
+let g:pdv_cfg_Comment1 = " * "
+let g:pdv_cfg_Commentn = " * "
+let g:pdv_cfg_CommentTail = " */"
+let g:pdv_cfg_CommentSingle = "//"
+
+" Default values
+let g:pdv_cfg_Type = "mixed"
+" let g:pdv_cfg_Package = "Framework"
+let g:pdv_cfg_Package = "Webdav"
+let g:pdv_cfg_Version = "//autogen//"
+let g:pdv_cfg_Author = ""
+let g:pdv_cfg_Copyright = "Copyright (c) 2010 All rights reserved."
+let g:pdv_cfg_License = "PHP Version 3.0 {@link http://www.php.net/license/3_0.txt}"
+
+let g:pdv_cfg_ReturnVal = "void"
+
+" Whether to create @uses tags for implementation of interfaces and inheritance
+let g:pdv_cfg_Uses = 0
+" TOB: let g:pdv_cfg_Uses = 1
+
+" Options
+" :set paste before documenting (1|0)? Recommended.
+let g:pdv_cfg_paste = 1
+
+" Whether for PHP5 code PHP4 tags should be set, like @access,... (1|0)?
+let g:pdv_cfg_php4always = 0
+" TOB: let g:pdv_cfg_php4always = 1
+
+" Whether to guess scopes after PEAR coding standards:
+" $_foo/_bar() == <private|protected> (1|0)?
+let g:pdv_cfg_php4guess = 1
+
+" If you selected 1 for the last value, this scope identifier will be used for
+" the identifiers having an _ in the first place.
+let g:pdv_cfg_php4guessval = "protected"
+
+"
+" Regular expressions
+"
+
+let g:pdv_re_comment = ' *\*/ *'
+
+" (private|protected|public)
+let g:pdv_re_scope = '\(private\|protected\|public\)'
+" (static)
+let g:pdv_re_static = '\(static\)'
+" (abstract)
+let g:pdv_re_abstract = '\(abstract\)'
+" (final)
+let g:pdv_re_final = '\(final\)'
+
+" [:space:]*(private|protected|public|static|abstract)*[:space:]+[:identifier:]+\([:params:]\)
+let g:pdv_re_func = '^\s*\([a-zA-Z ]*\)function\s\+\([^ (]\+\)\s*(\s*\(.*\)\s*)\s*[{;]\?$'
+" [:typehint:]*[:space:]*$[:identifier]\([:space:]*=[:space:]*[:value:]\)?
+let g:pdv_re_param = ' *\([^ &]*\) *&\?\$\([A-Za-z_][A-Za-z0-9_]*\) *=\? *\(.*\)\?$'
+
+" [:space:]*(private|protected|public\)[:space:]*$[:identifier:]+\([:space:]*=[:space:]*[:value:]+\)*;
+let g:pdv_re_attribute = '^\s*\(\(private\|public\|protected\|var\|static\)\+\)\s*\$\([^ ;=]\+\)[ =]*\(.*\);\?$'
+
+" [:spacce:]*(abstract|final|)[:space:]*(class|interface)+[:space:]+\(extends ([:identifier:])\)?[:space:]*\(implements ([:identifier:][, ]*)+\)?
+let g:pdv_re_class = '^\s*\([a-zA-Z]*\)\s*\(interface\|class\)\s*\([^ ]\+\)\s*\(extends\)\?\s*\([a-zA-Z0-9]*\)\?\s*\(implements*\)\? *\([a-zA-Z0-9_ ,]*\)\?.*$'
+
+let g:pdv_re_array = "^array *(.*"
+" FIXME (retest regex!)
+let g:pdv_re_float = '^[0-9]*\.[0-9]\+'
+let g:pdv_re_int = '^[0-9]\+'
+let g:pdv_re_string = "['\"].*"
+let g:pdv_re_bool = "\(true\|false\)"
+
+let g:pdv_re_indent = '^\s*'
+
+" Shortcuts for editing the text:
+let g:pdv_cfg_BOL = "norm! o"
+let g:pdv_cfg_EOL = ""
+
+" }}}
+
+ " {{{ PhpDocSingle()
+ " Document a single line of code ( does not check if doc block already exists )
+
+func! PhpDocSingle()
+ let l:endline = line(".") + 1
+ call PhpDoc()
+ exe "norm! " . l:endline . "G$"
+endfunc
+
+" }}}
+ " {{{ PhpDocRange()
+ " Documents a whole range of code lines ( does not add defualt doc block to
+ " unknown types of lines ). Skips elements where a docblock is already
+ " present.
+func! PhpDocRange() range
+ let l:line = a:firstline
+ let l:endLine = a:lastline
+ let l:elementName = ""
+ while l:line <= l:endLine
+ " TODO: Replace regex check for existing doc with check more lines
+ " above...
+ if (getline(l:line) =~ g:pdv_re_func || getline(l:line) =~ g:pdv_re_attribute || getline(l:line) =~ g:pdv_re_class) && getline(l:line - 1) !~ g:pdv_re_comment
+ let l:docLines = 0
+ " Ensure we are on the correct line to run PhpDoc()
+ exe "norm! " . l:line . "G$"
+ " No matter what, this returns the element name
+ let l:elementName = PhpDoc()
+ let l:endLine = l:endLine + (line(".") - l:line) + 1
+ let l:line = line(".") + 1
+ endif
+ let l:line = l:line + 1
+ endwhile
+endfunc
+
+ " }}}
+" {{{ PhpDocFold()
+
+" func! PhpDocFold(name)
+" let l:startline = line(".")
+" let l:currentLine = l:startLine
+" let l:commentHead = escape(g:pdv_cfg_CommentHead, "*.");
+" let l:txtBOL = g:pdv_cfg_BOL . matchstr(l:name, '^\s*')
+" " Search above for comment start
+" while (l:currentLine > 1)
+" if (matchstr(l:commentHead, getline(l:currentLine)))
+" break;
+" endif
+" let l:currentLine = l:currentLine + 1
+" endwhile
+" " Goto 1 line above and open a newline
+" exe "norm! " . (l:currentLine - 1) . "Go\<ESC>"
+" " Write the fold comment
+" exe l:txtBOL . g:pdv_cfg_CommentSingle . " {"."{{ " . a:name . g:pdv_cfg_EOL
+" " Add another newline below that
+" exe "norm! o\<ESC>"
+" " Search for our comment line
+" let l:currentLine = line(".")
+" while (l:currentLine <= line("$"))
+" " HERE!!!!
+" endwhile
+"
+"
+" endfunc
+
+
+" }}}
+
+" {{{ PhpDoc()
+
+func! PhpDoc()
+ " Needed for my .vimrc: Switch off all other enhancements while generating docs
+ let l:paste = &g:paste
+ let &g:paste = g:pdv_cfg_paste == 1 ? 1 : &g:paste
+
+ let l:line = getline(".")
+ let l:result = ""
+
+ if l:line =~ g:pdv_re_func
+ let l:result = PhpDocFunc()
+
+ elseif l:line =~ g:pdv_re_attribute
+ let l:result = PhpDocVar()
+
+ elseif l:line =~ g:pdv_re_class
+ let l:result = PhpDocClass()
+
+ else
+ let l:result = PhpDocDefault()
+
+ endif
+
+" if g:pdv_cfg_folds == 1
+" PhpDocFolds(l:result)
+" endif
+
+ let &g:paste = l:paste
+
+ return l:result
+endfunc
+
+" }}}
+" {{{ PhpDocFunc()
+
+func! PhpDocFunc()
+ " Line for the comment to begin
+ let commentline = line (".") - 1
+
+ let l:name = substitute (getline ("."), '^\(.*\)\/\/.*$', '\1', "")
+
+ "exe g:pdv_cfg_BOL . "DEBUG:" . name. g:pdv_cfg_EOL
+
+ " First some things to make it more easy for us:
+ " tab -> space && space+ -> space
+ " let l:name = substitute (l:name, '\t', ' ', "")
+ " Orphan. We're now using \s everywhere...
+
+ " Now we have to split DECL in three parts:
+ " \[(skopemodifier\)]\(funcname\)\(parameters\)
+ let l:indent = matchstr(l:name, g:pdv_re_indent)
+
+ let l:modifier = substitute (l:name, g:pdv_re_func, '\1', "g")
+ let l:funcname = substitute (l:name, g:pdv_re_func, '\2', "g")
+ let l:parameters = substitute (l:name, g:pdv_re_func, '\3', "g") . ","
+ let l:scope = PhpDocScope(l:modifier, l:funcname)
+ let l:static = g:pdv_cfg_php4always == 1 ? matchstr(l:modifier, g:pdv_re_static) : ""
+ let l:abstract = g:pdv_cfg_php4always == 1 ? matchstr(l:modifier, g:pdv_re_abstract) : ""
+ let l:final = g:pdv_cfg_php4always == 1 ? matchstr(l:modifier, g:pdv_re_final) : ""
+
+ exe "norm! " . commentline . "G$"
+
+ " Local indent
+ let l:txtBOL = g:pdv_cfg_BOL . l:indent
+
+ exe l:txtBOL . g:pdv_cfg_CommentHead . g:pdv_cfg_EOL
+ exe l:txtBOL . g:pdv_cfg_Comment1 . funcname . " " . g:pdv_cfg_EOL
+ exe l:txtBOL . g:pdv_cfg_Commentn . g:pdv_cfg_EOL
+
+ while (l:parameters != ",") && (l:parameters != "")
+ " Save 1st parameter
+ let _p = substitute (l:parameters, '\([^,]*\) *, *\(.*\)', '\1', "")
+ " Remove this one from list
+ let l:parameters = substitute (l:parameters, '\([^,]*\) *, *\(.*\)', '\2', "")
+ " PHP5 type hint?
+ let l:paramtype = substitute (_p, g:pdv_re_param, '\1', "")
+ " Parameter name
+ let l:paramname = substitute (_p, g:pdv_re_param, '\2', "")
+ " Parameter default
+ let l:paramdefault = substitute (_p, g:pdv_re_param, '\3', "")
+
+ if l:paramtype == ""
+ let l:paramtype = PhpDocType(l:paramdefault)
+ endif
+
+ if l:paramtype != ""
+ let l:paramtype = " " . l:paramtype
+ endif
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@param" . l:paramtype . " $" . l:paramname . " " . g:pdv_cfg_EOL
+ endwhile
+
+ if l:static != ""
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@static" . g:pdv_cfg_EOL
+ endif
+ if l:abstract != ""
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@abstract" . g:pdv_cfg_EOL
+ endif
+ if l:final != ""
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@final" . g:pdv_cfg_EOL
+ endif
+ if l:scope != ""
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@access " . l:scope . g:pdv_cfg_EOL
+ endif
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@return " . g:pdv_cfg_ReturnVal . g:pdv_cfg_EOL
+
+ " Close the comment block.
+ exe l:txtBOL . g:pdv_cfg_CommentTail . g:pdv_cfg_EOL
+ return l:modifier ." ". l:funcname
+endfunc
+
+" }}}
+ " {{{ PhpDocVar()
+
+func! PhpDocVar()
+ " Line for the comment to begin
+ let commentline = line (".") - 1
+
+ let l:name = substitute (getline ("."), '^\(.*\)\/\/.*$', '\1', "")
+
+ " Now we have to split DECL in three parts:
+ " \[(skopemodifier\)]\(funcname\)\(parameters\)
+ " let l:name = substitute (l:name, '\t', ' ', "")
+ " Orphan. We're now using \s everywhere...
+
+ let l:indent = matchstr(l:name, g:pdv_re_indent)
+
+ let l:modifier = substitute (l:name, g:pdv_re_attribute, '\1', "g")
+ let l:varname = substitute (l:name, g:pdv_re_attribute, '\3', "g")
+ let l:default = substitute (l:name, g:pdv_re_attribute, '\4', "g")
+ let l:scope = PhpDocScope(l:modifier, l:varname)
+
+ let l:static = g:pdv_cfg_php4always == 1 ? matchstr(l:modifier, g:pdv_re_static) : ""
+
+ let l:type = PhpDocType(l:default)
+
+ exe "norm! " . commentline . "G$"
+
+ " Local indent
+ let l:txtBOL = g:pdv_cfg_BOL . l:indent
+
+ exe l:txtBOL . g:pdv_cfg_CommentHead . g:pdv_cfg_EOL
+ exe l:txtBOL . g:pdv_cfg_Comment1 . l:varname . " " . g:pdv_cfg_EOL
+ exe l:txtBOL . g:pdv_cfg_Commentn . g:pdv_cfg_EOL
+ if l:static != ""
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@static" . g:pdv_cfg_EOL
+ endif
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@var " . l:type . g:pdv_cfg_EOL
+ if l:scope != ""
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@access " . l:scope . g:pdv_cfg_EOL
+ endif
+
+ " Close the comment block.
+ exe l:txtBOL . g:pdv_cfg_CommentTail . g:pdv_cfg_EOL
+ return l:modifier ." ". l:varname
+endfunc
+
+" }}}
+" {{{ PhpDocClass()
+
+func! PhpDocClass()
+ " Line for the comment to begin
+ let commentline = line (".") - 1
+
+ let l:name = substitute (getline ("."), '^\(.*\)\/\/.*$', '\1', "")
+
+ "exe g:pdv_cfg_BOL . "DEBUG:" . name. g:pdv_cfg_EOL
+
+ " First some things to make it more easy for us:
+ " tab -> space && space+ -> space
+ " let l:name = substitute (l:name, '\t', ' ', "")
+ " Orphan. We're now using \s everywhere...
+
+ " Now we have to split DECL in three parts:
+ " \[(skopemodifier\)]\(classname\)\(parameters\)
+ let l:indent = matchstr(l:name, g:pdv_re_indent)
+
+ let l:modifier = substitute (l:name, g:pdv_re_class, '\1', "g")
+ let l:classname = substitute (l:name, g:pdv_re_class, '\3', "g")
+ let l:extends = g:pdv_cfg_Uses == 1 ? substitute (l:name, g:pdv_re_class, '\5', "g") : ""
+ let l:interfaces = g:pdv_cfg_Uses == 1 ? substitute (l:name, g:pdv_re_class, '\7', "g") . "," : ""
+
+ let l:abstract = g:pdv_cfg_php4always == 1 ? matchstr(l:modifier, g:pdv_re_abstract) : ""
+ let l:final = g:pdv_cfg_php4always == 1 ? matchstr(l:modifier, g:pdv_re_final) : ""
+
+ exe "norm! " . commentline . "G$"
+
+ " Local indent
+ let l:txtBOL = g:pdv_cfg_BOL . l:indent
+
+ exe l:txtBOL . g:pdv_cfg_CommentHead . g:pdv_cfg_EOL
+ exe l:txtBOL . g:pdv_cfg_Comment1 . l:classname . " " . g:pdv_cfg_EOL
+ exe l:txtBOL . g:pdv_cfg_Commentn . g:pdv_cfg_EOL
+ if l:extends != "" && l:extends != "implements"
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@uses " . l:extends . g:pdv_cfg_EOL
+ endif
+
+ while (l:interfaces != ",") && (l:interfaces != "")
+ " Save 1st parameter
+ let interface = substitute (l:interfaces, '\([^, ]*\) *, *\(.*\)', '\1', "")
+ " Remove this one from list
+ let l:interfaces = substitute (l:interfaces, '\([^, ]*\) *, *\(.*\)', '\2', "")
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@uses " . l:interface . g:pdv_cfg_EOL
+ endwhile
+
+ if l:abstract != ""
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@abstract" . g:pdv_cfg_EOL
+ endif
+ if l:final != ""
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@final" . g:pdv_cfg_EOL
+ endif
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@package " . g:pdv_cfg_Package . g:pdv_cfg_EOL
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@version " . g:pdv_cfg_Version . g:pdv_cfg_EOL
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@copyright " . g:pdv_cfg_Copyright . g:pdv_cfg_EOL
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@author " . g:pdv_cfg_Author g:pdv_cfg_EOL
+ exe l:txtBOL . g:pdv_cfg_Commentn . "@license " . g:pdv_cfg_License . g:pdv_cfg_EOL
+
+ " Close the comment block.
+ exe l:txtBOL . g:pdv_cfg_CommentTail . g:pdv_cfg_EOL
+ return l:modifier ." ". l:classname
+endfunc
+
+" }}}
+" {{{ PhpDocScope()
+
+func! PhpDocScope(modifiers, identifier)
+" exe g:pdv_cfg_BOL . DEBUG: . a:modifiers . g:pdv_cfg_EOL
+ let l:scope = ""
+ if matchstr (a:modifiers, g:pdv_re_scope) != ""
+ if g:pdv_cfg_php4always == 1
+ let l:scope = matchstr (a:modifiers, g:pdv_re_scope)
+ else
+ let l:scope = "x"
+ endif
+ endif
+ if l:scope =~ "^\s*$" && g:pdv_cfg_php4guess
+ if a:identifier[0] == "_"
+ let l:scope = g:pdv_cfg_php4guessval
+ else
+ let l:scope = "public"
+ endif
+ endif
+ return l:scope != "x" ? l:scope : ""
+endfunc
+
+" }}}
+" {{{ PhpDocType()
+
+func! PhpDocType(typeString)
+ let l:type = ""
+ if a:typeString =~ g:pdv_re_array
+ let l:type = "array"
+ endif
+ if a:typeString =~ g:pdv_re_float
+ let l:type = "float"
+ endif
+ if a:typeString =~ g:pdv_re_int
+ let l:type = "int"
+ endif
+ if a:typeString =~ g:pdv_re_string
+ let l:type = "string"
+ endif
+ if a:typeString =~ g:pdv_re_bool
+ let l:type = "bool"
+ endif
+ if l:type == ""
+ let l:type = g:pdv_cfg_Type
+ endif
+ return l:type
+endfunc
+
+" }}}
+" {{{ PhpDocDefault()
+
+func! PhpDocDefault()
+ " Line for the comment to begin
+ let commentline = line (".") - 1
+
+ let l:indent = matchstr(getline("."), '^\ *')
+
+ exe "norm! " . commentline . "G$"
+
+ " Local indent
+ let l:txtBOL = g:pdv_cfg_BOL . indent
+
+ exe l:txtBOL . g:pdv_cfg_CommentHead . g:pdv_cfg_EOL
+ exe l:txtBOL . g:pdv_cfg_Commentn . " " . g:pdv_cfg_EOL
+
+ " Close the comment block.
+ exe l:txtBOL . g:pdv_cfg_CommentTail . g:pdv_cfg_EOL
+endfunc
+
+" }}}
+
+endif " user_commands
Please sign in to comment.
Something went wrong with that request. Please try again.