Add extended php support
This commit is contained in:
parent
d4eca3f2eb
commit
d96dc724d4
24
after/ftplugin/php.vim
Normal file
24
after/ftplugin/php.vim
Normal file
@ -0,0 +1,24 @@
|
||||
|
||||
if !exists("g:DisableAutoPHPFolding")
|
||||
let g:DisableAutoPHPFolding = 0
|
||||
endif
|
||||
|
||||
if !g:DisableAutoPHPFolding
|
||||
" Don't use the PHP syntax folding
|
||||
setlocal foldmethod=manual
|
||||
" Turn on PHP fast folds
|
||||
EnableFastPHPFolds
|
||||
endif
|
||||
|
||||
" Fix matchpairs for PHP (for matchit.vim plugin)
|
||||
if exists("loaded_matchit")
|
||||
let b:match_skip = 's:comment\|string'
|
||||
let b:match_words = '<?\(php\)\?:?>,\<switch\>:\<endswitch\>,' .
|
||||
\ '\<if\>:\<elseif\>:\<else\>:\<endif\>,' .
|
||||
\ '\<while\>:\<endwhile\>,\<do\>:\<while\>,' .
|
||||
\ '\<for\>:\<endfor\>,\<foreach\>:\<endforeach\>' .
|
||||
\ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' .
|
||||
\ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' .
|
||||
\ '<\@<=\([^/?][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>,' .
|
||||
\ '<:>,(:),{:},[:]'
|
||||
endif
|
5230
autoload/phpcomplete.vim
Normal file
5230
autoload/phpcomplete.vim
Normal file
File diff suppressed because it is too large
Load Diff
1
build.sh
1
build.sh
@ -51,6 +51,7 @@ syntax 'vim-scripts/XSLT-syntax' &
|
||||
syntax 'vim-scripts/python.vim--Vasiliev' &
|
||||
syntax 'vim-scripts/octave.vim--' &
|
||||
syntax 'uggedal/go-vim' &
|
||||
syntax 'spf13/PIV' &
|
||||
|
||||
wait
|
||||
|
||||
|
202
ftplugin/php.vim
Normal file
202
ftplugin/php.vim
Normal file
@ -0,0 +1,202 @@
|
||||
" File: php.vim
|
||||
" Description: PHP Integration for VIM plugin
|
||||
" This file is a considerable fork of the original
|
||||
" PDV written by Tobias Schlitt <toby@php.net>.
|
||||
" Maintainer: Steve Francia <piv@spf13.com> <http://spf13.com>
|
||||
" Version: 0.9
|
||||
" Last Change: 7th January 2012
|
||||
"
|
||||
"
|
||||
" Section: script init stuff {{{1
|
||||
if exists("loaded_piv")
|
||||
finish
|
||||
endif
|
||||
let loaded_piv = 1
|
||||
|
||||
"
|
||||
" Function: s:InitVariable() function {{{2
|
||||
" This function is used to initialise a given variable to a given value. The
|
||||
" variable is only initialised if it does not exist prior
|
||||
"
|
||||
" Args:
|
||||
" -var: the name of the var to be initialised
|
||||
" -value: the value to initialise var to
|
||||
"
|
||||
" Returns:
|
||||
" 1 if the var is set, 0 otherwise
|
||||
function s:InitVariable(var, value)
|
||||
if !exists(a:var)
|
||||
exec 'let ' . a:var . ' = ' . "'" . a:value . "'"
|
||||
return 1
|
||||
endif
|
||||
return 0
|
||||
endfunction
|
||||
|
||||
|
||||
" {{{ Settings
|
||||
" First the global PHP configuration
|
||||
let php_sql_query=1 " to highlight SQL syntax in strings
|
||||
let php_htmlInStrings=1 " to highlight HTML in string
|
||||
let php_noShortTags = 1 " to disable short tags
|
||||
let php_folding = 1 "to enable folding for classes and functions
|
||||
let PHP_autoformatcomment = 1
|
||||
let php_sync_method = -1
|
||||
|
||||
" Section: variable init calls {{{2
|
||||
call s:InitVariable("g:load_doxygen_syntax", 1)
|
||||
call s:InitVariable("g:syntax_extra_php", 'doxygen')
|
||||
call s:InitVariable("g:syntax_extra_inc", 'doxygen')
|
||||
call s:InitVariable("g:PIVCreateDefaultMappings", 1)
|
||||
call s:InitVariable("g:PIVPearStyle", 0)
|
||||
call s:InitVariable("g:PIVAutoClose", 0)
|
||||
|
||||
" Auto expand tabs to spaces
|
||||
setlocal expandtab
|
||||
setlocal autoindent " Auto indent after a {
|
||||
setlocal smartindent
|
||||
|
||||
" Linewidth to 79, because of the formatoptions this is only valid for
|
||||
" comments
|
||||
setlocal textwidth=79
|
||||
|
||||
setlocal nowrap " Do not wrap lines automatically
|
||||
|
||||
" 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
|
||||
if !exists("g:syntax_on") | syntax on | endif
|
||||
|
||||
"setlocal keywordprg=pman " Use pman for manual pages
|
||||
|
||||
" }}} Settings
|
||||
|
||||
" {{{ Command mappings
|
||||
nnoremap <silent> <plug>PIVphpDocSingle :call PhpDocSingle()<CR>
|
||||
vnoremap <silent> <plug>PIVphpDocRange :call PhpDocRange()<CR>
|
||||
vnoremap <silent> <plug>PIVphpAlign :call PhpAlign()<CR>
|
||||
"inoremap <buffer> <leader>d :call PhpDocSingle()<CR>i
|
||||
|
||||
" Map ; to "add ; to the end of the line, when missing"
|
||||
"noremap <buffer> ; :s/\([^;]\)$/\1;/<cr>
|
||||
|
||||
" Map <ctrl>+p to single line mode documentation (in insert and command mode)
|
||||
"inoremap <buffer> <leader>d :call PhpDocSingle()<CR>i
|
||||
"nnoremap <buffer> <leader>d :call PhpDocSingle()<CR>
|
||||
" Map <ctrl>+p to multi line mode documentation (in visual mode)
|
||||
"vnoremap <buffer> <leader>d :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>
|
||||
|
||||
" }}}
|
||||
|
||||
" {{{ Automatic close char mapping
|
||||
if g:PIVAutoClose
|
||||
if g:PIVPearStyle
|
||||
inoremap <buffer> { {<CR>}<C-O>O
|
||||
inoremap <buffer> ( ( )<LEFT><LEFT>
|
||||
else
|
||||
inoremap { {<CR>}<C-O>O
|
||||
inoremap ( ()<LEFT>
|
||||
endif
|
||||
|
||||
inoremap <buffer> [ []<LEFT>
|
||||
inoremap <buffer> " ""<LEFT>
|
||||
inoremap <buffer> ' ''<LEFT>
|
||||
endif
|
||||
" }}} 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
|
||||
setlocal dictionary-=$VIMRUNTIME/bundle/PIV/misc/funclist.txt dictionary+=$VIMRUNTIME/bundle/PIV/misc/funclist.txt
|
||||
|
||||
" Use the dictionary completion
|
||||
setlocal complete-=k complete+=k
|
||||
|
||||
" }}} Dictionary completion
|
||||
|
||||
" {{{ 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
|
||||
|
||||
" }}}
|
||||
|
||||
function! s:CreateNMap(target, combo)
|
||||
if !hasmapto(a:target, 'n')
|
||||
exec 'nmap ' . a:combo . ' ' . a:target
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:CreateVMap(target, combo)
|
||||
if !hasmapto(a:target, 'v')
|
||||
exec 'vmap ' . a:combo . ' ' . a:target
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:CreateMaps(target, combo)
|
||||
call s:CreateNMap(a:target,a:combo)
|
||||
call s:CreateVMap(a:target,a:combo)
|
||||
endfunction
|
||||
|
||||
if g:PIVCreateDefaultMappings
|
||||
call s:CreateNMap('<plug>PIVphpDocSingle', ',pd')
|
||||
call s:CreateVMap('<plug>PIVphpDocRange', ',pd')
|
||||
call s:CreateMaps('<plug>PIVphpAlign ', ',pa')
|
||||
endif
|
547
ftplugin/php/doc.vim
Normal file
547
ftplugin/php/doc.vim
Normal file
@ -0,0 +1,547 @@
|
||||
" PDV (phpDocumentor for Vim)
|
||||
" ===========================
|
||||
"
|
||||
" Version: 1.1.3
|
||||
"
|
||||
" Copyright 2005 by Tobias Schlitt <toby@php.net>
|
||||
" Inspired by phpDoc script for Vim by Vidyut Luther (http://www.phpcult.com/).
|
||||
"
|
||||
|
||||
" modified by kevin olson (acidjazz@gmail.com) - 03/19/2009
|
||||
" - added folding support
|
||||
"
|
||||
" 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.0.1
|
||||
" -------------
|
||||
" * Fixed issues when using tabs instead of spaces.
|
||||
" * Fixed some parsing bugs when using a different coding style.
|
||||
" * Fixed bug with call-by-reference parameters.
|
||||
" * ATTENTION: This version already has code for the next version 1.1.0,
|
||||
" which is propably not working!
|
||||
"
|
||||
" Version 1.1.0 (preview)
|
||||
" -------------
|
||||
" * Added foldmarker generation.
|
||||
"
|
||||
|
||||
" Version 1.1.2
|
||||
" -------------
|
||||
" * Completed foldmarker commenting for functions
|
||||
"
|
||||
|
||||
|
||||
|
||||
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_CommentEnd = "/* }}} */"
|
||||
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 = 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 = 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*[{;]\?$'
|
||||
let g:pdv_re_funcend = '^\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 *(.*"
|
||||
let g:pdv_re_float = '^[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_funcend
|
||||
let l:result = PhpDocFuncEnd()
|
||||
|
||||
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
|
||||
|
||||
" }}}
|
||||
|
||||
" {{{ PhpDocFuncEnd()
|
||||
func! PhpDocFuncEnd()
|
||||
|
||||
call append(line('.'), matchstr(getline('.'), '^\s*') . g:pdv_cfg_CommentEnd)
|
||||
endfunc
|
||||
" }}}
|
||||
" {{{ PhpDocFuncEndAuto()
|
||||
func! PhpDocFuncEndAuto()
|
||||
|
||||
|
||||
call search('{')
|
||||
call searchpair('{', '', '}')
|
||||
call append(line('.'), matchstr(getline('.'), '^\s*') . g:pdv_cfg_CommentEnd)
|
||||
|
||||
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:params = substitute (l:name, g:pdv_re_func, '\3', "g")
|
||||
let l:sparams = substitute (l:params, '[$ ]', '', "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
|
||||
|
||||
exec l:txtBOL . "/* " . l:scope ." ". funcname . "(" . l:params . ") {{" . "{ */ " . g:pdv_cfg_EOL
|
||||
|
||||
exe l:txtBOL . g:pdv_cfg_CommentHead . g:pdv_cfg_EOL
|
||||
" added folding
|
||||
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 . PhpDocFuncEndAuto()
|
||||
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
|
1269
indent/php.vim
Normal file
1269
indent/php.vim
Normal file
File diff suppressed because it is too large
Load Diff
27
syntax/htmljinja.vim
Normal file
27
syntax/htmljinja.vim
Normal file
@ -0,0 +1,27 @@
|
||||
" Vim syntax file
|
||||
" Language: Jinja HTML template
|
||||
" Maintainer: Armin Ronacher <armin.ronacher@active-4.com>
|
||||
" Last Change: 2007 Apr 8
|
||||
|
||||
" For version 5.x: Clear all syntax items
|
||||
" For version 6.x: Quit when a syntax file was already loaded
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
if !exists("main_syntax")
|
||||
let main_syntax = 'html'
|
||||
endif
|
||||
|
||||
if version < 600
|
||||
so <sfile>:p:h/jinja.vim
|
||||
so <sfile>:p:h/html.vim
|
||||
else
|
||||
runtime! syntax/jinja.vim
|
||||
runtime! syntax/html.vim
|
||||
unlet b:current_syntax
|
||||
endif
|
||||
|
||||
let b:current_syntax = "htmljinja"
|
113
syntax/jinja.vim
Normal file
113
syntax/jinja.vim
Normal file
@ -0,0 +1,113 @@
|
||||
" Vim syntax file
|
||||
" Language: Jinja template
|
||||
" Maintainer: Armin Ronacher <armin.ronacher@active-4.com>
|
||||
" Last Change: 2008 May 9
|
||||
" Version: 1.1
|
||||
"
|
||||
" Known Bugs:
|
||||
" because of odd limitations dicts and the modulo operator
|
||||
" appear wrong in the template.
|
||||
"
|
||||
" Changes:
|
||||
"
|
||||
" 2008 May 9: Added support for Jinja2 changes (new keyword rules)
|
||||
|
||||
" For version 5.x: Clear all syntax items
|
||||
" For version 6.x: Quit when a syntax file was already loaded
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
syntax case match
|
||||
|
||||
" Jinja template built-in tags and parameters (without filter, macro, is and raw, they
|
||||
" have special threatment)
|
||||
syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained and if else in not or recursive as import
|
||||
|
||||
syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained is filter skipwhite nextgroup=jinjaFilter
|
||||
syn keyword jinjaStatement containedin=jinjaTagBlock contained macro skipwhite nextgroup=jinjaFunction
|
||||
syn keyword jinjaStatement containedin=jinjaTagBlock contained block skipwhite nextgroup=jinjaBlockName
|
||||
|
||||
" Variable Names
|
||||
syn match jinjaVariable containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained skipwhite /[a-zA-Z_][a-zA-Z0-9_]*/
|
||||
syn keyword jinjaSpecial containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained false true none loop super caller varargs kwargs
|
||||
|
||||
" Filters
|
||||
syn match jinjaOperator "|" containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained nextgroup=jinjaFilter
|
||||
syn match jinjaFilter contained skipwhite /[a-zA-Z_][a-zA-Z0-9_]*/
|
||||
syn match jinjaFunction contained skipwhite /[a-zA-Z_][a-zA-Z0-9_]*/
|
||||
syn match jinjaBlockName contained skipwhite /[a-zA-Z_][a-zA-Z0-9_]*/
|
||||
|
||||
" Jinja template constants
|
||||
syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/"/ skip=/\\"/ end=/"/
|
||||
syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/'/ skip=/\\'/ end=/'/
|
||||
syn match jinjaNumber containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[0-9]\+\(\.[0-9]\+\)\?/
|
||||
|
||||
" Operators
|
||||
syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[+\-*\/<>=!,:]/
|
||||
syn match jinjaPunctuation containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[()\[\]]/
|
||||
syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /\./ nextgroup=jinjaAttribute
|
||||
syn match jinjaAttribute contained /[a-zA-Z_][a-zA-Z0-9_]*/
|
||||
|
||||
" Jinja template tag and variable blocks
|
||||
syn region jinjaNested matchgroup=jinjaOperator start="(" end=")" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
|
||||
syn region jinjaNested matchgroup=jinjaOperator start="\[" end="\]" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
|
||||
syn region jinjaNested matchgroup=jinjaOperator start="{" end="}" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
|
||||
syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ skipwhite containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment
|
||||
|
||||
syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment
|
||||
|
||||
" Jinja template 'raw' tag
|
||||
syn region jinjaRaw matchgroup=jinjaRawDelim start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,jinjaComment
|
||||
|
||||
" Jinja comments
|
||||
syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString
|
||||
|
||||
" Block start keywords. A bit tricker. We only highlight at the start of a
|
||||
" tag block and only if the name is not followed by a comma or equals sign
|
||||
" which usually means that we have to deal with an assignment.
|
||||
syn match jinjaStatement containedin=jinjaTagBlock contained skipwhite /\({%-\?\s*\)\@<=\<[a-zA-Z_][a-zA-Z0-9_]*\>\(\s*[,=]\)\@!/
|
||||
|
||||
" and context modifiers
|
||||
syn match jinjaStatement containedin=jinjaTagBlock contained /\<with\(out\)\?\s\+context\>/ skipwhite
|
||||
|
||||
|
||||
" Define the default highlighting.
|
||||
" For version 5.7 and earlier: only when not done already
|
||||
" For version 5.8 and later: only when an item doesn't have highlighting yet
|
||||
if version >= 508 || !exists("did_jinja_syn_inits")
|
||||
if version < 508
|
||||
let did_jinja_syn_inits = 1
|
||||
command -nargs=+ HiLink hi link <args>
|
||||
else
|
||||
command -nargs=+ HiLink hi def link <args>
|
||||
endif
|
||||
|
||||
HiLink jinjaPunctuation jinjaOperator
|
||||
HiLink jinjaAttribute jinjaVariable
|
||||
HiLink jinjaFunction jinjaFilter
|
||||
|
||||
HiLink jinjaTagDelim jinjaTagBlock
|
||||
HiLink jinjaVarDelim jinjaVarBlock
|
||||
HiLink jinjaCommentDelim jinjaComment
|
||||
HiLink jinjaRawDelim jinja
|
||||
|
||||
HiLink jinjaSpecial Special
|
||||
HiLink jinjaOperator Normal
|
||||
HiLink jinjaRaw Normal
|
||||
HiLink jinjaTagBlock PreProc
|
||||
HiLink jinjaVarBlock PreProc
|
||||
HiLink jinjaStatement Statement
|
||||
HiLink jinjaFilter Function
|
||||
HiLink jinjaBlockName Function
|
||||
HiLink jinjaVariable Identifier
|
||||
HiLink jinjaString Constant
|
||||
HiLink jinjaNumber Constant
|
||||
HiLink jinjaComment Comment
|
||||
|
||||
delcommand HiLink
|
||||
endif
|
||||
|
||||
let b:current_syntax = "jinja"
|
666
syntax/php.vim
Normal file
666
syntax/php.vim
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user