diff options
author | Bram Moolenaar <Bram@vim.org> | 2014-03-22 21:02:50 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2014-03-22 21:02:50 +0100 |
commit | a68783751647e3243ca6f22df62907efbdbccb02 (patch) | |
tree | 372908fd79defec22190b6d2a48bbc6155bb22e7 /runtime/autoload | |
parent | ed287f9a4e3f4ed5528ad2af65b7b23bce14a688 (diff) | |
download | vim-git-a68783751647e3243ca6f22df62907efbdbccb02.tar.gz |
Updated runtime files.
Diffstat (limited to 'runtime/autoload')
-rw-r--r-- | runtime/autoload/netrw.vim | 3538 | ||||
-rw-r--r-- | runtime/autoload/phpcomplete.vim | 7315 |
2 files changed, 4332 insertions, 6521 deletions
diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim index 4634a343c..5b1c27a8a 100644 --- a/runtime/autoload/netrw.vim +++ b/runtime/autoload/netrw.vim @@ -1,7 +1,7 @@ " netrw.vim: Handles file transfer and remote directory listing across " AUTOLOAD SECTION -" Date: Jan 21, 2014 -" Version: 150 +" Date: Mar 20, 2014 +" Version: 151 " Maintainer: Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM> " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim " Copyright: Copyright (C) 1999-2013 Charles E. Campbell {{{1 @@ -22,7 +22,7 @@ if &cp || exists("g:loaded_netrw") finish endif -let g:loaded_netrw = "v150" +let g:loaded_netrw = "v151" if !exists("s:NOTE") let s:NOTE = 0 let s:WARNING = 1 @@ -30,7 +30,8 @@ if !exists("s:NOTE") endif let s:keepcpo= &cpo -set cpo&vim +setl cpo&vim +"let g:dechofuncname=1 "DechoRemOn "call Decho("doing autoload/netrw.vim version ".g:loaded_netrw) @@ -43,7 +44,7 @@ set cpo&vim " 0=note = s:NOTE " 1=warning = s:WARNING " 2=error = s:ERROR -" Jan 03, 2014 : max errnum currently is 95 +" Mar 04, 2014 : max errnum currently is 96 fun! netrw#ErrorMsg(level,msg,errnum) " call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow) @@ -98,7 +99,7 @@ fun! netrw#ErrorMsg(level,msg,errnum) hi link netrwMesgWarning WarningMsg hi link netrwMesgError Error endif -" call Decho("(ErrorMsg) setl noma ro bh=wipe") +" call Decho("setl noma ro bh=wipe") setl noma ro bh=wipe else @@ -297,7 +298,7 @@ if !exists("g:netrw_list_cmd") " provide a scp-based default listing command let g:netrw_list_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME ls -FLa" else -" call Decho(g:netrw_ssh_cmd." is not executable") +" call Decho("g:netrw_ssh_cmd." is not executable") let g:netrw_list_cmd= "" endif endif @@ -379,8 +380,17 @@ call s:NetrwInit("g:netrw_sshport" , "-p") call s:NetrwInit("g:netrw_rename_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME mv") call s:NetrwInit("g:netrw_rm_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME rm") call s:NetrwInit("g:netrw_rmdir_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME rmdir") -call s:NetrwInit("g:netrw_rmf_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME rm -f") -" Default values - s ---------- {{{3 +call s:NetrwInit("g:netrw_rmf_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME rm -f ") +" Default values - q-s ---------- {{{3 +call s:NetrwInit("g:netrw_quickhelp",0) +let s:QuickHelp= ["-:go up dir D:delete R:rename s:sort-by x:special", + \ "%:create new file d:create new directory", + \ "o:split&open v:vert-split&open", + \ "i:style qf:file info O:obtain r:reverse p:preview", + \ "mf:mark file mt:set target mm:move mc:copy", + \ "-bookmarks- mb:make mB:delete qb:list gb:go to", + \ "-history- qb:list u:go up U:go down", + \ "-targets- mt:target Tb:use bookmark Th:use history"] " g:netrw_sepchr: picking a character that doesn't appear in filenames that can be used to separate priority from filename call s:NetrwInit("g:netrw_sepchr" , (&enc == "euc-jp")? "\<Char-0x01>" : "\<Char-0xff>") call s:NetrwInit("s:netrw_silentxfer" , (exists("g:netrw_silent") && g:netrw_silent != 0)? "sil keepj " : "keepj ") @@ -396,7 +406,7 @@ if !exists("g:netrw_sort_sequence") endif call s:NetrwInit("g:netrw_special_syntax" , 0) call s:NetrwInit("g:netrw_ssh_browse_reject", '^total\s\+\d\+$') -call s:NetrwInit("g:netrw_use_noswf" , 0) +call s:NetrwInit("g:netrw_use_noswf" , 1) " Default values - t-w ---------- {{{3 call s:NetrwInit("g:netrw_timefmt","%c") if !exists("g:netrw_xstrlen") @@ -426,7 +436,7 @@ endif call s:NetrwInit("g:netrw_menu_escape",'.&? \') call s:NetrwInit("g:netrw_tmpfile_escape",' &;') call s:NetrwInit("s:netrw_map_escape","<|\n\r\\\<C-V>\"") -if &enc == 'utf-8' || &enc == 'utf-16' || &enc == 'ucs-4' +if has("gui_running") && (&enc == 'utf-8' || &enc == 'utf-16' || &enc == 'ucs-4') let s:treedepthstring= "│ " else let s:treedepthstring= "| " @@ -442,8 +452,8 @@ endif " ====================== if v:version >= 700 && has("balloon_eval") && !exists("s:initbeval") && !exists("g:netrw_nobeval") && has("syntax") && exists("g:syntax_on") " call Decho("installed beval events") - let &l:bexpr = "netrw#NetrwBalloonHelp()" - au FileType netrw set beval + let &l:bexpr = "netrw#BalloonHelp()" + au FileType netrw setl beval au WinLeave * if &ft == "netrw" && exists("s:initbeval")|let &beval= s:initbeval|endif au VimEnter * let s:initbeval= &beval "else " Decho @@ -461,10 +471,10 @@ au WinEnter * if &ft == "netrw"|call s:NetrwInsureWinVars()|endif " ============================== " --------------------------------------------------------------------- -" netrw#NetrwBalloonHelp: {{{2 +" netrw#BalloonHelp: {{{2 if v:version >= 700 && has("balloon_eval") && has("syntax") && exists("g:syntax_on") && !exists("g:netrw_nobeval") " call Decho("loading netrw#BalloonHelp()") - fun! netrw#NetrwBalloonHelp() + fun! netrw#BalloonHelp() if &ft != "netrw" return "" endif @@ -498,262 +508,6 @@ if v:version >= 700 && has("balloon_eval") && has("syntax") && exists("g:syntax_ endif " ------------------------------------------------------------------------ -" s:NetrwOptionSave: save options prior to setting to "netrw-buffer-standard" form {{{2 -" Options get restored by s:NetrwOptionRestore() -" 06/08/07 : removed call to NetrwSafeOptions(), either placed -" immediately after NetrwOptionSave() calls in NetRead -" and NetWrite, or after the s:NetrwEnew() call in -" NetrwBrowse. -" vt: normally its "w:" or "s:" (a variable type) -fun! s:NetrwOptionSave(vt) -" call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$")." mod=".&mod." ma=".&ma) -" call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist")) -" call Decho("(s:NetrwOptionSave) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) - - if !exists("{a:vt}netrw_optionsave") - let {a:vt}netrw_optionsave= 1 - else -" call Dret("s:NetrwOptionSave : options already saved") - return - endif -" call Decho("(s:NetrwOptionSave) prior to save: fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff) - - " Save current settings and current directory -" call Decho("saving current settings and current directory") - let s:yykeep = @@ - if exists("&l:acd")|let {a:vt}netrw_acdkeep = &l:acd|endif - let {a:vt}netrw_aikeep = &l:ai - let {a:vt}netrw_awkeep = &l:aw - let {a:vt}netrw_bhkeep = &l:bh - let {a:vt}netrw_blkeep = &l:bl - let {a:vt}netrw_btkeep = &l:bt - let {a:vt}netrw_bombkeep = &l:bomb - let {a:vt}netrw_cedit = &cedit - let {a:vt}netrw_cikeep = &l:ci - let {a:vt}netrw_cinkeep = &l:cin - let {a:vt}netrw_cinokeep = &l:cino - let {a:vt}netrw_comkeep = &l:com - let {a:vt}netrw_cpokeep = &l:cpo - let {a:vt}netrw_diffkeep = &l:diff - let {a:vt}netrw_fenkeep = &l:fen - let {a:vt}netrw_ffkeep = &l:ff - let {a:vt}netrw_fokeep = &l:fo " formatoptions - let {a:vt}netrw_gdkeep = &l:gd " gdefault - let {a:vt}netrw_hidkeep = &l:hidden - let {a:vt}netrw_imkeep = &l:im - let {a:vt}netrw_iskkeep = &l:isk - let {a:vt}netrw_lskeep = &l:ls - let {a:vt}netrw_makeep = &l:ma - let {a:vt}netrw_magickeep = &l:magic - let {a:vt}netrw_modkeep = &l:mod - let {a:vt}netrw_nukeep = &l:nu - let {a:vt}netrw_repkeep = &l:report - let {a:vt}netrw_rokeep = &l:ro - let {a:vt}netrw_selkeep = &l:sel - let {a:vt}netrw_spellkeep = &l:spell - let {a:vt}netrw_starkeep = @* - let {a:vt}netrw_tskeep = &l:ts - let {a:vt}netrw_twkeep = &l:tw " textwidth - let {a:vt}netrw_wigkeep = &l:wig " wildignore - let {a:vt}netrw_wrapkeep = &l:wrap - let {a:vt}netrw_writekeep = &l:write - if g:netrw_use_noswf && has("win32") && !has("win95") - let {a:vt}netrw_swfkeep = &l:swf - endif - - " save a few selected netrw-related variables -" call Decho("saving a few selected netrw-related variables") - if g:netrw_keepdir - let {a:vt}netrw_dirkeep = getcwd() - endif - if has("win32") && !has("win95") - let {a:vt}netrw_swfkeep = &l:swf " swapfile - endif - if &go =~# 'a' | sil! let {a:vt}netrw_regstar = @* | endif - sil! let {a:vt}netrw_regslash= @/ - -" call Decho("(s:NetrwOptionSave) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) -" call Dret("s:NetrwOptionSave : tab#".tabpagenr()." win#".winnr()) -endfun - -" ------------------------------------------------------------------------ -" s:NetrwOptionRestore: restore options (based on prior s:NetrwOptionSave) {{{2 -fun! s:NetrwOptionRestore(vt) -" call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$")) -" call Decho("(NetrwOptionRestore) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) - if !exists("{a:vt}netrw_optionsave") - if exists("s:nbcd_curpos_{bufnr('%')}") -" call Decho("(NetrwOptionRestore) restoring previous position (s:nbcd_curpos_".bufnr('%')." exists)") - keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')}) -" call Decho("(NetrwOptionRestore) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$")) -" call Decho("(NetrwOptionRestore) unlet s:nbcd_curpos_".bufnr('%')) - unlet s:nbcd_curpos_{bufnr('%')} - else -" call Decho("(NetrwOptionRestore) no previous position") - endif -" call Decho("(NetrwOptionRestore) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) -" call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") -" call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist") - return - endif - unlet {a:vt}netrw_optionsave - - if exists("+acd") - if exists("{a:vt}netrw_acdkeep") -" call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) - let curdir = getcwd() - let &l:acd = {a:vt}netrw_acdkeep - unlet {a:vt}netrw_acdkeep - if &l:acd -" call Decho("exe keepj lcd ".fnameescape(curdir)) " NOTE: was g:netrw_fname_escape for some reason - try - if !exists("&l:acd") && !&l:acd - exe 'keepj lcd '.fnameescape(curdir) - endif - catch /^Vim\%((\a\+)\)\=:E472/ - call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".curdir."> (permissions?)",61) - endtry - endif - endif - endif - if exists("{a:vt}netrw_aikeep") |let &l:ai = {a:vt}netrw_aikeep |unlet {a:vt}netrw_aikeep |endif - if exists("{a:vt}netrw_awkeep") |let &l:aw = {a:vt}netrw_awkeep |unlet {a:vt}netrw_awkeep |endif - if g:netrw_liststyle != s:TREELIST - if exists("{a:vt}netrw_bhkeep") |let &l:bh = {a:vt}netrw_bhkeep |unlet {a:vt}netrw_bhkeep |endif - endif - if exists("{a:vt}netrw_blkeep") |let &l:bl = {a:vt}netrw_blkeep |unlet {a:vt}netrw_blkeep |endif - if exists("{a:vt}netrw_btkeep") |let &l:bt = {a:vt}netrw_btkeep |unlet {a:vt}netrw_btkeep |endif - if exists("{a:vt}netrw_bombkeep") |let &l:bomb = {a:vt}netrw_bombkeep |unlet {a:vt}netrw_bombkeep |endif - if exists("{a:vt}netrw_cedit") |let &cedit = {a:vt}netrw_cedit |unlet {a:vt}netrw_cedit |endif - if exists("{a:vt}netrw_cikeep") |let &l:ci = {a:vt}netrw_cikeep |unlet {a:vt}netrw_cikeep |endif - if exists("{a:vt}netrw_cinkeep") |let &l:cin = {a:vt}netrw_cinkeep |unlet {a:vt}netrw_cinkeep |endif - if exists("{a:vt}netrw_cinokeep") |let &l:cino = {a:vt}netrw_cinokeep |unlet {a:vt}netrw_cinokeep |endif - if exists("{a:vt}netrw_comkeep") |let &l:com = {a:vt}netrw_comkeep |unlet {a:vt}netrw_comkeep |endif - if exists("{a:vt}netrw_cpokeep") |let &l:cpo = {a:vt}netrw_cpokeep |unlet {a:vt}netrw_cpokeep |endif - if exists("{a:vt}netrw_diffkeep") |let &l:diff = {a:vt}netrw_diffkeep |unlet {a:vt}netrw_diffkeep |endif - if exists("{a:vt}netrw_fenkeep") |let &l:fen = {a:vt}netrw_fenkeep |unlet {a:vt}netrw_fenkeep |endif - if exists("{a:vt}netrw_ffkeep") |let &l:ff = {a:vt}netrw_ffkeep |unlet {a:vt}netrw_ffkeep |endif - if exists("{a:vt}netrw_fokeep") |let &l:fo = {a:vt}netrw_fokeep |unlet {a:vt}netrw_fokeep |endif - if exists("{a:vt}netrw_gdkeep") |let &l:gd = {a:vt}netrw_gdkeep |unlet {a:vt}netrw_gdkeep |endif - if exists("{a:vt}netrw_hidkeep") |let &l:hidden = {a:vt}netrw_hidkeep |unlet {a:vt}netrw_hidkeep |endif - if exists("{a:vt}netrw_imkeep") |let &l:im = {a:vt}netrw_imkeep |unlet {a:vt}netrw_imkeep |endif - if exists("{a:vt}netrw_iskkeep") |let &l:isk = {a:vt}netrw_iskkeep |unlet {a:vt}netrw_iskkeep |endif - if exists("{a:vt}netrw_lskeep") |let &l:ls = {a:vt}netrw_lskeep |unlet {a:vt}netrw_lskeep |endif - if exists("{a:vt}netrw_makeep") |let &l:ma = {a:vt}netrw_makeep |unlet {a:vt}netrw_makeep |endif - if exists("{a:vt}netrw_magickeep")|let &l:magic = {a:vt}netrw_magickeep |unlet {a:vt}netrw_magickeep|endif - if exists("{a:vt}netrw_modkeep") |let &l:mod = {a:vt}netrw_modkeep |unlet {a:vt}netrw_modkeep |endif - if exists("{a:vt}netrw_nukeep") |let &l:nu = {a:vt}netrw_nukeep |unlet {a:vt}netrw_nukeep |endif - if exists("{a:vt}netrw_repkeep") |let &l:report = {a:vt}netrw_repkeep |unlet {a:vt}netrw_repkeep |endif - if exists("{a:vt}netrw_rokeep") |let &l:ro = {a:vt}netrw_rokeep |unlet {a:vt}netrw_rokeep |endif - if exists("{a:vt}netrw_selkeep") |let &l:sel = {a:vt}netrw_selkeep |unlet {a:vt}netrw_selkeep |endif - if exists("{a:vt}netrw_spellkeep")|let &l:spell = {a:vt}netrw_spellkeep |unlet {a:vt}netrw_spellkeep|endif - if exists("{a:vt}netrw_starkeep") |let @* = {a:vt}netrw_starkeep |unlet {a:vt}netrw_starkeep |endif - " Problem: start with liststyle=0; press <i> : result, following line resets l:ts. -" if exists("{a:vt}netrw_tskeep") |let &l:ts = {a:vt}netrw_tskeep |unlet {a:vt}netrw_tskeep |endif - if exists("{a:vt}netrw_twkeep") |let &l:tw = {a:vt}netrw_twkeep |unlet {a:vt}netrw_twkeep |endif - if exists("{a:vt}netrw_wigkeep") |let &l:wig = {a:vt}netrw_wigkeep |unlet {a:vt}netrw_wigkeep |endif - if exists("{a:vt}netrw_wrapkeep") |let &l:wrap = {a:vt}netrw_wrapkeep |unlet {a:vt}netrw_wrapkeep |endif - if exists("{a:vt}netrw_writekeep")|let &l:write = {a:vt}netrw_writekeep |unlet {a:vt}netrw_writekeep|endif - if exists("s:yykeep") |let @@ = s:yykeep |unlet s:yykeep |endif - if exists("{a:vt}netrw_swfkeep") - if &directory == "" - " user hasn't specified a swapfile directory; - " netrw will temporarily set the swapfile directory - " to the current directory as returned by getcwd(). - let &l:directory= getcwd() - sil! let &l:swf = {a:vt}netrw_swfkeep - setl directory= - unlet {a:vt}netrw_swfkeep - elseif &l:swf != {a:vt}netrw_swfkeep - " following line causes a Press ENTER in windows -- can't seem to work around it!!! - sil! let &l:swf= {a:vt}netrw_swfkeep - unlet {a:vt}netrw_swfkeep - endif - endif - if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir - let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g') - if exists("{a:vt}netrw_dirkeep") |exe "keepj lcd ".fnameescape(dirkeep)|unlet {a:vt}netrw_dirkeep |endif - endif - if exists("{a:vt}netrw_regstar") |sil! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif - if exists("{a:vt}netrw_regslash")|sil! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif - if exists("s:nbcd_curpos_{bufnr('%')}") -" call Decho("(NetrwOptionRestore) restoring previous position (s:nbcd_curpos_".bufnr('%')." exists)") - keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')}) -" call Decho("(NetrwOptionRestore) unlet s:nbcd_curpos_".bufnr('%')) - if exists("s:nbcd_curpos_".bufnr('%')) - unlet s:nbcd_curpos_{bufnr('%')} - endif - else -" call Decho("no previous position") - endif - -" call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) -" call Decho("(NetrwOptionRestore) fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")) -" call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") -" call Decho("(NetrwOptionRestore) diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist")) -" call Decho("(NetrwOptionRestore) ts=".&l:ts) - " Moved the filetype detect here from NetrwGetFile() because remote files - " were having their filetype detect-generated settings overwritten by - " NetrwOptionRestore. - if &ft != "netrw" -" call Decho("(NetrwOptionRestore) filetype detect (ft=".&ft.")") - filetype detect - endif -" call Decho("(s:NetrwOptionRestore) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) -" call Dret("s:NetrwOptionRestore : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) -endfun - -" --------------------------------------------------------------------- -" s:NetrwSafeOptions: sets options to help netrw do its job {{{2 -" Use s:NetrwSaveOptions() to save user settings -" Use s:NetrwOptionRestore() to restore user settings -fun! s:NetrwSafeOptions() -" call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%"))."> winnr($)=".winnr("$")) -" call Decho("(s:NetrwSafeOptions) win#".winnr()."'s ft=".&ft) -" call Decho("(s:NetrwSafeOptions) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) - if exists("+acd") | setl noacd | endif - setl noai - setl noaw - setl nobl - setl nobomb - setl noci - setl nocin - if g:netrw_liststyle == s:TREELIST - setl bh=hide - endif - setl cino= - setl com= - setl cpo-=a - setl cpo-=A - setl fo=nroql2 - setl nohid - setl noim - setl isk+=@ isk+=* isk+=/ - setl magic - setl report=10000 - setl sel=inclusive - setl nospell - setl tw=0 - setl wig= - set cedit& - if g:netrw_use_noswf && has("win32") && !has("win95") - setl noswf - endif - call s:NetrwCursor() - - " allow the user to override safe options -" call Decho("(s:NetrwSafeOptions) ft<".&ft."> ei=".&ei) - if &ft == "netrw" -" call Decho("(s:NetrwSafeOptions) do any netrw FileType autocmds (doau FileType netrw)") - sil! keepalt keepj doau FileType netrw - endif - -" call Decho("(s:NetrwSafeOptions) fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." bh=".&l:bh) -" call Decho("(s:NetrwSafeOptions) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) -" call Dret("s:NetrwSafeOptions") -endfun - -" --------------------------------------------------------------------- " netrw#Explore: launch the local browser in the directory of the current file {{{2 " indx: == -1: Nexplore " == -2: Pexplore @@ -774,25 +528,52 @@ fun! netrw#Explore(indx,dosplit,style,...) " call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." modifiable=".&modifiable." a:0=".a:0." win#".winnr()." buf#".bufnr("%")) if !exists("b:netrw_curdir") let b:netrw_curdir= getcwd() -" call Decho("(Explore) set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)") +" call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)") endif + + " record current file for Rexplore's benefit + if &ft != "netrw" + let w:netrw_rexfile= expand("%:p") + endif + + " record current directory let curdir = simplify(b:netrw_curdir) let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e') if !exists("g:netrw_cygwin") && (has("win32") || has("win95") || has("win64") || has("win16")) let curdir= substitute(curdir,'\','/','g') endif -" call Decho("(Explore) curdir<".curdir."> curfiledir<".curfiledir.">") +" call Decho("curdir<".curdir."> curfiledir<".curfiledir.">") + + " using completion, directories with spaces in their names (thanks, Bill Gates, for a truly dumb idea) + " will end up with backslashes here. Solution: strip off backslashes that precede white space and + " try Explore again. + if a:0 > 0 +" call Decho('considering retry: a:1<'.a:1.'>: '. + \ ((a:1 =~ "\\\s")? 'has backslash whitespace' : 'does not have backslash whitespace').', '. + \ ((filereadable(a:1))? 'is readable' : 'is not readable').', '. + \ ((isdirectory(a:1))? 'is a directory' : 'is not a directory')) + if a:1 =~ "\\\s" && !filereadable(a:1) && !isdirectory(a:1) +" call Decho("re-trying Explore with <".substitute(a:1,'\\\(\s\)','\1','g').">") + call netrw#Explore(a:indx,a:dosplit,a:style,substitute(a:1,'\\\(\s\)','\1','g')) +" call Dret("netrw#Explore : returning from retry") + return +" else " Decho +" call Decho("retry not needed") + endif + endif " save registers - sil! let keepregstar = @* - sil! let keepregplus = @+ + if has("clipboard") + sil! let keepregstar = @* + sil! let keepregplus = @+ + endif sil! let keepregslash= @/ " if dosplit " -or- file has been modified AND file not hidden when abandoned " -or- Texplore used if a:dosplit || (&modified && &hidden == 0 && &bufhidden != "hide") || a:style == 6 -" call Decho("(Explore) case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified") +" call Decho("case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified") call s:SaveWinVars() let winsz= g:netrw_winsize if a:indx > 0 @@ -800,106 +581,106 @@ fun! netrw#Explore(indx,dosplit,style,...) endif if a:style == 0 " Explore, Sexplore -" call Decho("(Explore) style=0: Explore or Sexplore") +" call Decho("style=0: Explore or Sexplore") let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz exe winsz."wincmd s" elseif a:style == 1 "Explore!, Sexplore! -" call Decho("(Explore) style=1: Explore! or Sexplore!") +" call Decho("style=1: Explore! or Sexplore!") let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz exe "keepalt ".winsz."wincmd v" elseif a:style == 2 " Hexplore -" call Decho("(Explore) style=2: Hexplore") +" call Decho("style=2: Hexplore") let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz exe "keepalt bel ".winsz."wincmd s" elseif a:style == 3 " Hexplore! -" call Decho("(Explore) style=3: Hexplore!") +" call Decho("style=3: Hexplore!") let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz exe "keepalt abo ".winsz."wincmd s" elseif a:style == 4 " Vexplore -" call Decho("(Explore) style=4: Vexplore") +" call Decho("style=4: Vexplore") let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz exe "keepalt lefta ".winsz."wincmd v" elseif a:style == 5 " Vexplore! -" call Decho("(Explore) style=5: Vexplore!") +" call Decho("style=5: Vexplore!") let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz exe "keepalt rightb ".winsz."wincmd v" elseif a:style == 6 " Texplore call s:SaveBufVars() -" call Decho("(Explore) style = 6: Texplore") +" call Decho("style = 6: Texplore") exe "keepalt tabnew ".fnameescape(curdir) call s:RestoreBufVars() endif call s:RestoreWinVars() " else " Decho -" call Decho("(Explore) case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6") +" call Decho("case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6") endif keepj norm! 0 if a:0 > 0 -" call Decho("(Explore) case [a:0=".a:0."] > 0: a:1<".a:1.">") +" call Decho("case [a:0=".a:0."] > 0: a:1<".a:1.">") if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)) -" call Decho("(Explore) ..case a:1<".a:1.">: starts with ~ and unix or cygwin") +" call Decho("..case a:1<".a:1.">: starts with ~ and unix or cygwin") let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),'')) -" call Decho("(Explore) ..using dirname<".dirname."> (case: ~ && unix||cygwin)") +" call Decho("..using dirname<".dirname."> (case: ~ && unix||cygwin)") elseif a:1 == '.' -" call Decho("(Explore) ..case a:1<".a:1.">: matches .") +" call Decho("..case a:1<".a:1.">: matches .") let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd()) if dirname !~ '/$' let dirname= dirname."/" endif -" call Decho("(Explore) ..using dirname<".dirname."> (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")") +" call Decho("..using dirname<".dirname."> (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")") elseif a:1 =~ '\$' -" call Decho("(Explore) ..case a:1<".a:1.">: matches ending $") +" call Decho("..case a:1<".a:1.">: matches ending $") let dirname= simplify(expand(a:1)) -" call Decho("(Explore) ..using user-specified dirname<".dirname."> with $env-var") +" call Decho("..using user-specified dirname<".dirname."> with $env-var") elseif a:1 !~ '^\*\{1,2}/' && a:1 !~ '^\a\{3,}://' -" call Decho("(Explore) ..case a:1<".a:1.">: other, not pattern or filepattern") +" call Decho("..case a:1<".a:1.">: other, not pattern or filepattern") let dirname= simplify(a:1) -" call Decho("(Explore) ..using user-specified dirname<".dirname.">") +" call Decho("..using user-specified dirname<".dirname.">") else -" call Decho("(Explore) ..case a:1: pattern or filepattern") +" call Decho("..case a:1: pattern or filepattern") let dirname= a:1 endif else " clear explore -" call Decho("(Explore) case a:0=".a:0.": clearing Explore list") +" call Decho("case a:0=".a:0.": clearing Explore list") call s:NetrwClearExplore() " call Dret("netrw#Explore : cleared list") return endif -" call Decho("(Explore) dirname<".dirname.">") +" call Decho("dirname<".dirname.">") if dirname =~ '\.\./\=$' let dirname= simplify(fnamemodify(dirname,':p:h')) elseif dirname =~ '\.\.' || dirname == '.' let dirname= simplify(fnamemodify(dirname,':p')) endif -" call Decho("(Explore) dirname<".dirname."> (after simplify)") +" call Decho("dirname<".dirname."> (after simplify)") if dirname =~ '^\*//' " starpat=1: Explore *//pattern (current directory only search for files containing pattern) -" call Decho("(Explore) case starpat=1: Explore *//pattern") +" call Decho("case starpat=1: Explore *//pattern") let pattern= substitute(dirname,'^\*//\(.*\)$','\1','') let starpat= 1 -" call Decho("(Explore) ..Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">") +" call Decho("..Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">") if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif elseif dirname =~ '^\*\*//' " starpat=2: Explore **//pattern (recursive descent search for files containing pattern) -" call Decho("(Explore) case starpat=2: Explore **//pattern") +" call Decho("case starpat=2: Explore **//pattern") let pattern= substitute(dirname,'^\*\*//','','') let starpat= 2 -" call Decho("(Explore) ..Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">") +" call Decho("..Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">") elseif dirname =~ '/\*\*/' " handle .../**/.../filepat -" call Decho("(Explore) case starpat=4: Explore .../**/.../filepat") +" call Decho("case starpat=4: Explore .../**/.../filepat") let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','') if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16"))) let b:netrw_curdir = prefixdir @@ -908,30 +689,30 @@ fun! netrw#Explore(indx,dosplit,style,...) endif let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','') let starpat= 4 -" call Decho("(Explore) ..pwd<".getcwd()."> dirname<".dirname.">") -" call Decho("(Explore) ..case Explore ../**/../filepat (starpat=".starpat.")") +" call Decho("..pwd<".getcwd()."> dirname<".dirname.">") +" call Decho("..case Explore ../**/../filepat (starpat=".starpat.")") elseif dirname =~ '^\*/' " case starpat=3: Explore */filepat (search in current directory for filenames matching filepat) let starpat= 3 -" call Decho("(Explore) case starpat=3: Explore */filepat (starpat=".starpat.")") +" call Decho("case starpat=3: Explore */filepat (starpat=".starpat.")") elseif dirname=~ '^\*\*/' " starpat=4: Explore **/filepat (recursive descent search for filenames matching filepat) let starpat= 4 -" call Decho("(Explore) case starpat=4: Explore **/filepat (starpat=".starpat.")") +" call Decho("case starpat=4: Explore **/filepat (starpat=".starpat.")") else let starpat= 0 -" call Decho("(Explore) case starpat=0: default") +" call Decho("case starpat=0: default") endif if starpat == 0 && a:indx >= 0 " [Explore Hexplore Vexplore Sexplore] [dirname] -" call Decho("(Explore) case starpat==0 && a:indx=".a:indx.": dirname<".dirname.">, handles Explore Hexplore Vexplore Sexplore") +" call Decho("case starpat==0 && a:indx=".a:indx.": dirname<".dirname.">, handles Explore Hexplore Vexplore Sexplore") if dirname == "" let dirname= curfiledir -" call Decho("(Explore) ..empty dirname, using current file's directory<".dirname.">") +" call Decho("..empty dirname, using current file's directory<".dirname.">") endif if dirname =~ '^scp://' || dirname =~ '^ftp://' call netrw#Nread(2,dirname) @@ -940,15 +721,17 @@ fun! netrw#Explore(indx,dosplit,style,...) if dirname == "" let dirname= getcwd() elseif (has("win32") || has("win95") || has("win64") || has("win16")) && !g:netrw_cygwin - if dirname !~ '^[a-zA-Z]:' + " Windows : check for a drive specifier, or else for a remote share name ('\\Foo' or '//Foo', + " depending on whether backslashes have been converted to forward slashes by earlier code). + if dirname !~ '^[a-zA-Z]:' && dirname !~ '^\\\\\w\+' && dirname !~ '^//\w\+' let dirname= b:netrw_curdir."/".dirname endif elseif dirname !~ '^/' let dirname= b:netrw_curdir."/".dirname endif -" call Decho("(Explore) ..calling LocalBrowseCheck(dirname<".dirname.">)") +" call Decho("..calling LocalBrowseCheck(dirname<".dirname.">)") call netrw#LocalBrowseCheck(dirname) -" call Decho("(Explore) win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) +" call Decho("win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) endif if exists("w:netrw_bannercnt") " done to handle P08-Ingelrest. :Explore will _Always_ go to the line just after the banner. @@ -956,7 +739,7 @@ fun! netrw#Explore(indx,dosplit,style,...) exe w:netrw_bannercnt endif -" call Decho("(Explore) curdir<".curdir.">") +" call Decho("curdir<".curdir.">") " --------------------------------------------------------------------- " Jan 24, 2013: not sure why the following was present. See P08-Ingelrest " if has("win32") || has("win95") || has("win64") || has("win16") @@ -972,30 +755,32 @@ fun! netrw#Explore(indx,dosplit,style,...) " starpat=4: Explore **/filepat (recursive descent search for filenames matching filepat) elseif a:indx <= 0 " Nexplore, Pexplore, Explore: handle starpat -" call Decho("(Explore) case a:indx<=0: Nexplore, Pexplore, <s-down>, <s-up> starpat=".starpat." a:indx=".a:indx) +" call Decho("case a:indx<=0: Nexplore, Pexplore, <s-down>, <s-up> starpat=".starpat." a:indx=".a:indx) if !mapcheck("<s-up>","n") && !mapcheck("<s-down>","n") && exists("b:netrw_curdir") -" call Decho("(Explore) ..set up <s-up> and <s-down> maps") +" call Decho("..set up <s-up> and <s-down> maps") let s:didstarstar= 1 nnoremap <buffer> <silent> <s-up> :Pexplore<cr> nnoremap <buffer> <silent> <s-down> :Nexplore<cr> endif if has("path_extra") -" call Decho("(Explore) ..starpat=".starpat.": has +path_extra") +" call Decho("..starpat=".starpat.": has +path_extra") if !exists("w:netrw_explore_indx") let w:netrw_explore_indx= 0 endif let indx = a:indx -" call Decho("(Explore) ..starpat=".starpat.": set indx= [a:indx=".indx."]") +" call Decho("..starpat=".starpat.": set indx= [a:indx=".indx."]") if indx == -1 " Nexplore -" call Decho("(Explore) ..case Nexplore with starpat=".starpat.": (indx=".indx.")") +" call Decho("..case Nexplore with starpat=".starpat.": (indx=".indx.")") if !exists("w:netrw_explore_list") " sanity check keepj call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40) - sil! let @* = keepregstar - sil! let @+ = keepregstar + if has("clipboard") + sil! let @* = keepregstar + sil! let @+ = keepregstar + endif sil! let @/ = keepregslash " call Dret("netrw#Explore") return @@ -1004,21 +789,23 @@ fun! netrw#Explore(indx,dosplit,style,...) if indx < 0 | let indx= 0 | endif if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif let curfile= w:netrw_explore_list[indx] -" call Decho("(Explore) ....indx=".indx." curfile<".curfile.">") +" call Decho("....indx=".indx." curfile<".curfile.">") while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx] let indx= indx + 1 -" call Decho("(Explore) ....indx=".indx." (Nexplore while loop)") +" call Decho("....indx=".indx." (Nexplore while loop)") endwhile if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif -" call Decho("(Explore) ....Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx) +" call Decho("....Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx) elseif indx == -2 " Pexplore -" call Decho("(Explore) case Pexplore with starpat=".starpat.": (indx=".indx.")") +" call Decho("case Pexplore with starpat=".starpat.": (indx=".indx.")") if !exists("w:netrw_explore_list") " sanity check keepj call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41) - sil! let @* = keepregstar - sil! let @+ = keepregstar + if has("clipboard") + sil! let @* = keepregstar + sil! let @+ = keepregstar + endif sil! let @/ = keepregslash " call Dret("netrw#Explore") return @@ -1027,30 +814,30 @@ fun! netrw#Explore(indx,dosplit,style,...) if indx < 0 | let indx= 0 | endif if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif let curfile= w:netrw_explore_list[indx] -" call Decho("(Explore) ....indx=".indx." curfile<".curfile.">") +" call Decho("....indx=".indx." curfile<".curfile.">") while indx >= 0 && curfile == w:netrw_explore_list[indx] let indx= indx - 1 -" call Decho("(Explore) ....indx=".indx." (Pexplore while loop)") +" call Decho("....indx=".indx." (Pexplore while loop)") endwhile if indx < 0 | let indx= 0 | endif -" call Decho("(Explore) ....Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx) +" call Decho("....Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx) else " Explore -- initialize " build list of files to Explore with Nexplore/Pexplore -" call Decho("(Explore) ..starpat=".starpat.": case Explore: initialize (indx=".indx.")") +" call Decho("..starpat=".starpat.": case Explore: initialize (indx=".indx.")") keepj keepalt call s:NetrwClearExplore() let w:netrw_explore_indx= 0 if !exists("b:netrw_curdir") let b:netrw_curdir= getcwd() endif -" call Decho("(Explore) ....starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">") +" call Decho("....starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">") " switch on starpat to build the w:netrw_explore_list of files if starpat == 1 " starpat=1: Explore *//pattern (current directory only search for files containing pattern) -" call Decho("(Explore) ..case starpat=".starpat.": build *//pattern list (curdir-only srch for files containing pattern) &hls=".&hls) -" call Decho("(Explore) ....pattern<".pattern.">") +" call Decho("..case starpat=".starpat.": build *//pattern list (curdir-only srch for files containing pattern) &hls=".&hls) +" call Decho("....pattern<".pattern.">") try exe "keepj noautocmd vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*" catch /^Vim\%((\a\+)\)\=:E480/ @@ -1063,15 +850,17 @@ fun! netrw#Explore(indx,dosplit,style,...) elseif starpat == 2 " starpat=2: Explore **//pattern (recursive descent search for files containing pattern) -" call Decho("(Explore) ..case starpat=".starpat.": build **//pattern list (recursive descent files containing pattern)") -" call Decho("(Explore) ....pattern<".pattern.">") +" call Decho("..case starpat=".starpat.": build **//pattern list (recursive descent files containing pattern)") +" call Decho("....pattern<".pattern.">") try exe "sil keepj noautocmd keepalt vimgrep /".pattern."/gj "."**/*" catch /^Vim\%((\a\+)\)\=:E480/ keepalt call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45) if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif - sil! let @* = keepregstar - sil! let @+ = keepregstar + if has("clipboard") + sil! let @* = keepregstar + sil! let @+ = keepregstar + endif sil! let @/ = keepregslash " call Dret("netrw#Explore : no files matched pattern") return @@ -1083,29 +872,31 @@ fun! netrw#Explore(indx,dosplit,style,...) elseif starpat == 3 " starpat=3: Explore */filepat (search in current directory for filenames matching filepat) -" call Decho("(Explore) ..case starpat=".starpat.": build */filepat list (curdir-only srch filenames matching filepat) &hls=".&hls) +" call Decho("..case starpat=".starpat.": build */filepat list (curdir-only srch filenames matching filepat) &hls=".&hls) let filepat= substitute(dirname,'^\*/','','') let filepat= substitute(filepat,'^[%#<]','\\&','') -" call Decho("(Explore) ....b:netrw_curdir<".b:netrw_curdir.">") -" call Decho("(Explore) ....filepat<".filepat.">") +" call Decho("....b:netrw_curdir<".b:netrw_curdir.">") +" call Decho("....filepat<".filepat.">") let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".filepat),'\n')) if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif elseif starpat == 4 " starpat=4: Explore **/filepat (recursive descent search for filenames matching filepat) -" call Decho("(Explore) ..case starpat=".starpat.": build **/filepat list (recursive descent srch filenames matching filepat) &hls=".&hls) +" call Decho("..case starpat=".starpat.": build **/filepat list (recursive descent srch filenames matching filepat) &hls=".&hls) let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".dirname),'\n')) if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif endif " switch on starpat to build w:netrw_explore_list let w:netrw_explore_listlen = len(w:netrw_explore_list) -" call Decho("(Explore) ....w:netrw_explore_list<".string(w:netrw_explore_list).">") -" call Decho("(Explore) ....w:netrw_explore_listlen=".w:netrw_explore_listlen) +" call Decho("....w:netrw_explore_list<".string(w:netrw_explore_list).">") +" call Decho("....w:netrw_explore_listlen=".w:netrw_explore_listlen) if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/') keepalt keepj call netrw#ErrorMsg(s:WARNING,"no files matched",42) - sil! let @* = keepregstar - sil! let @+ = keepregstar + if has("clipboard") + sil! let @* = keepregstar + sil! let @+ = keepregstar + endif sil! let @/ = keepregslash " call Dret("netrw#Explore : no files matched") return @@ -1114,22 +905,22 @@ fun! netrw#Explore(indx,dosplit,style,...) " NetrwStatusLine support - for exploring support let w:netrw_explore_indx= indx -" call Decho("(Explore) ....w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen) +" call Decho("....w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen) " wrap the indx around, but issue a note if indx >= w:netrw_explore_listlen || indx < 0 -" call Decho("(Explore) ....wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")") +" call Decho("....wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")") let indx = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0 let w:netrw_explore_indx= indx keepalt keepj call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43) endif exe "let dirfile= w:netrw_explore_list[".indx."]" -" call Decho("(Explore) ....dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">") +" call Decho("....dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">") let newdir= substitute(dirfile,'/[^/]*$','','e') -" call Decho("(Explore) ....newdir<".newdir.">") +" call Decho("....newdir<".newdir.">") -" call Decho("(Explore) ....calling LocalBrowseCheck(newdir<".newdir.">)") +" call Decho("....calling LocalBrowseCheck(newdir<".newdir.">)") call netrw#LocalBrowseCheck(newdir) if !exists("w:netrw_liststyle") let w:netrw_liststyle= g:netrw_liststyle @@ -1143,22 +934,24 @@ fun! netrw#Explore(indx,dosplit,style,...) let w:netrw_explore_bufnr = bufnr("%") let w:netrw_explore_line = line(".") keepalt keepj call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}') -" call Decho("(Explore) ....explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line) +" call Decho("....explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line) else -" call Decho("(Explore) ..your vim does not have +path_extra") +" call Decho("..your vim does not have +path_extra") if !exists("g:netrw_quiet") keepalt keepj call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44) endif - sil! let @* = keepregstar - sil! let @+ = keepregstar + if has("clipboard") + sil! let @* = keepregstar + sil! let @+ = keepregstar + endif sil! let @/ = keepregslash " call Dret("netrw#Explore : missing +path_extra") return endif else -" call Decho("(Explore) ..default case: Explore newdir<".dirname.">") +" call Decho("..default case: Explore newdir<".dirname.">") if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/' sil! unlet w:netrw_treedict sil! unlet w:netrw_treetop @@ -1172,13 +965,13 @@ fun! netrw#Explore(indx,dosplit,style,...) endif " visual display of **/ **// */ Exploration files -" call Decho("(Explore) w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist")) -" call Decho("(Explore) b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">") +" call Decho("w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist")) +" call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">") if exists("w:netrw_explore_indx") && exists("b:netrw_curdir") -" call Decho("(Explore) s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-")) +" call Decho("s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-")) if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir " only update match list when current directory isn't the same as before -" call Decho("(Explore) only update match list when current directory not the same as before") +" call Decho("only update match list when current directory not the same as before") let s:explore_prvdir = b:netrw_curdir let s:explore_match = "" let dirlen = strlen(b:netrw_curdir) @@ -1187,7 +980,7 @@ fun! netrw#Explore(indx,dosplit,style,...) endif let prvfname= "" for fname in w:netrw_explore_list -" call Decho("(Explore) fname<".fname.">") +" call Decho("fname<".fname.">") if fname =~ '^'.b:netrw_curdir if s:explore_match == "" let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>' @@ -1203,7 +996,7 @@ fun! netrw#Explore(indx,dosplit,style,...) endif let prvfname= fname endfor -" call Decho("(Explore) explore_match<".s:explore_match.">") +" call Decho("explore_match<".s:explore_match.">") exe "2match netrwMarkFile /".s:explore_match."/" endif echo "<s-up>==Pexplore <s-down>==Nexplore" @@ -1212,11 +1005,17 @@ fun! netrw#Explore(indx,dosplit,style,...) if exists("s:explore_match") | unlet s:explore_match | endif if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif echo " " -" call Decho("(Explore) cleared explore match list") +" call Decho("cleared explore match list") endif - sil! let @* = keepregstar - sil! let @+ = keepregstar + " since Explore may be used to initialize netrw's browser, + " there's no danger of a late FocusGained event on initialization. + " Consequently, set s:netrw_events to 2. + let s:netrw_events= 2 + if has("clipboard") + sil! let @* = keepregstar + sil! let @+ = keepregstar + endif sil! let @/ = keepregslash " call Dret("netrw#Explore : @/<".@/.">") endfun @@ -1225,6 +1024,21 @@ endfun " netrw#Lexplore: toggle Explorer window, keeping it on the left of the current tab {{{2 fun! netrw#Lexplore(...) " call Dfunc("netrw#Lexplore() a:0=".a:0) + if a:0 > 0 && a:1 != "" + " if a netrw window is already on the left-side of the tab + " and a directory has been specified, explore with that + " directory. + let lexwinnr= winnr() + exe "1wincmd w" + if &ft == "netrw" + exe "Explore ".fnameescape(a:1) + exe lexwinnr."wincmd w" + endif + exe lexwinnr."wincmd w" +" call Dret("netrw#Lexplore") + return + endif + if exists("t:netrw_lexbufnr") " close down netrw explorer window let lexwinnr = bufwinnr(t:netrw_lexbufnr) @@ -1242,48 +1056,25 @@ fun! netrw#Lexplore(...) let keep_altv = g:netrw_altv let g:netrw_altv = 0 if a:0 > 0 && a:1 != "" - Vexplore a:1 + exe "Vexplore ".fnameescape(a:1) else Vexplore . endif let g:netrw_altv = keep_altv let t:netrw_lexbufnr = bufnr("%") endif -" call Dret("netrw#Lexplore") -endfun - -" --------------------------------------------------------------------- -" netrw#NetrwMakeTgt: make a target out of the directory name provided {{{2 -fun! netrw#NetrwMakeTgt(dname) -" call Dfunc("netrw#NetrwMakeTgt(dname<".a:dname.">)") - " simplify the target (eg. /abc/def/../ghi -> /abc/ghi) - let svpos = netrw#NetrwSavePosn() - let s:netrwmftgt_islocal= (a:dname !~ '^\a\+://') -" call Decho("s:netrwmftgt_islocal=".s:netrwmftgt_islocal) - if s:netrwmftgt_islocal - let netrwmftgt= simplify(a:dname) - else - let netrwmftgt= a:dname - endif - if exists("s:netrwmftgt") && netrwmftgt == s:netrwmftgt - " re-selected target, so just clear it - unlet s:netrwmftgt s:netrwmftgt_islocal - else - let s:netrwmftgt= netrwmftgt + if exists("g:netrw_chgwin") && g:netrw_chgwin == -1 + let g:netrw_chgwin= 2 endif - if g:netrw_fastbrowse <= 1 - call s:NetrwRefresh((b:netrw_curdir !~ '\a\+://'),b:netrw_curdir) - endif - call netrw#NetrwRestorePosn(svpos) -" call Dret("netrw#NetrwMakeTgt") +" call Dret("netrw#Lexplore") endfun " --------------------------------------------------------------------- -" netrw#NetrwClean: remove netrw {{{2 +" netrw#Clean: remove netrw {{{2 " supports :NetrwClean -- remove netrw from first directory on runtimepath " :NetrwClean! -- remove netrw from all directories on runtimepath -fun! netrw#NetrwClean(sys) -" call Dfunc("netrw#NetrwClean(sys=".a:sys.")") +fun! netrw#Clean(sys) +" call Dfunc("netrw#Clean(sys=".a:sys.")") if a:sys let choice= confirm("Remove personal and system copies of netrw?","&Yes\n&No") @@ -1321,28 +1112,44 @@ fun! netrw#NetrwClean(sys) endif echohl None -" call Dret("netrw#NetrwClean") +" call Dret("netrw#Clean") endfun " --------------------------------------------------------------------- -" netrw#Nread: {{{2 -fun! netrw#Nread(mode,fname) -" call Dfunc("netrw#Nread(mode=".a:mode." fname<".a:fname.">)") - call netrw#NetrwSavePosn() - call netrw#NetRead(a:mode,a:fname) - call netrw#NetrwRestorePosn() -" call Dret("netrw#Nread") +" netrw#MakeTgt: make a target out of the directory name provided {{{2 +fun! netrw#MakeTgt(dname) +" call Dfunc("netrw#MakeTgt(dname<".a:dname.">)") + " simplify the target (eg. /abc/def/../ghi -> /abc/ghi) + let svpos = netrw#SavePosn() + let s:netrwmftgt_islocal= (a:dname !~ '^\a\+://') +" call Decho("s:netrwmftgt_islocal=".s:netrwmftgt_islocal) + if s:netrwmftgt_islocal + let netrwmftgt= simplify(a:dname) + else + let netrwmftgt= a:dname + endif + if exists("s:netrwmftgt") && netrwmftgt == s:netrwmftgt + " re-selected target, so just clear it + unlet s:netrwmftgt s:netrwmftgt_islocal + else + let s:netrwmftgt= netrwmftgt + endif + if g:netrw_fastbrowse <= 1 + call s:NetrwRefresh((b:netrw_curdir !~ '\a\+://'),b:netrw_curdir) + endif + call netrw#RestorePosn(svpos) +" call Dret("netrw#MakeTgt") endfun -" ------------------------------------------------------------------------ -" netrw#NetrwObtain: {{{2 -" netrw#NetrwObtain(islocal,fname[,tgtdirectory]) +" --------------------------------------------------------------------- +" netrw#Obtain: {{{2 +" netrw#Obtain(islocal,fname[,tgtdirectory]) " islocal=0 obtain from remote source " =1 obtain from local source " fname : a filename or a list of filenames " tgtdir : optional place where files are to go (not present, uses getcwd()) -fun! netrw#NetrwObtain(islocal,fname,...) -" call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0) +fun! netrw#Obtain(islocal,fname,...) +" call Dfunc("netrw#Obtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0) " NetrwStatusLine support - for obtaining support if type(a:fname) == 1 @@ -1351,7 +1158,7 @@ fun! netrw#NetrwObtain(islocal,fname,...) let fnamelist= a:fname else call netrw#ErrorMsg(s:ERROR,"attempting to use NetrwObtain on something not a filename or a list",62) -" call Dret("netrw#NetrwObtain") +" call Dret("netrw#Obtain") return endif " call Decho("fnamelist<".string(fnamelist).">") @@ -1529,7 +1336,7 @@ fun! netrw#NetrwObtain(islocal,fname,...) endif endif elseif !exists("b:netrw_method") || b:netrw_method < 0 -" call Dfunc("netrw#NetrwObtain : unsupported method") +" call Dfunc("netrw#Obtain : unsupported method") return endif @@ -1549,7 +1356,282 @@ fun! netrw#NetrwObtain(islocal,fname,...) endif endif -" call Dret("netrw#NetrwObtain") +" call Dret("netrw#Obtain") +endfun + +" --------------------------------------------------------------------- +" netrw#Nread: save position, call netrw#NetRead(), and restore position {{{2 +fun! netrw#Nread(mode,fname) +" call Dfunc("netrw#Nread(mode=".a:mode." fname<".a:fname.">)") + call netrw#SavePosn() + call netrw#NetRead(a:mode,a:fname) + call netrw#RestorePosn() + + if exists("w:netrw_liststyle") && w:netrw_liststyle != s:TREELIST + if exists("w:netrw_bannercnt") + " start with cursor just after the banner + exe w:netrw_bannercnt + endif + endif +" call Dret("netrw#Nread") +endfun + +" ------------------------------------------------------------------------ +" s:NetrwOptionRestore: restore options (based on prior s:NetrwOptionSave) {{{2 +fun! s:NetrwOptionRestore(vt) +" call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$")) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) + if !exists("{a:vt}netrw_optionsave") + if exists("s:nbcd_curpos_{bufnr('%')}") +" call Decho("restoring previous position (s:nbcd_curpos_".bufnr('%')." exists)") + keepj call netrw#RestorePosn(s:nbcd_curpos_{bufnr('%')}) +" call Decho("win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$")) +" call Decho("unlet s:nbcd_curpos_".bufnr('%')) + unlet s:nbcd_curpos_{bufnr('%')} + else +" call Decho("no previous position") + endif +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist") + return + endif + unlet {a:vt}netrw_optionsave + + if exists("+acd") + if exists("{a:vt}netrw_acdkeep") +" call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) + let curdir = getcwd() + let &l:acd = {a:vt}netrw_acdkeep + unlet {a:vt}netrw_acdkeep + if &l:acd + call s:NetrwLcd(curdir) + endif + endif + endif + if exists("{a:vt}netrw_aikeep") |let &l:ai = {a:vt}netrw_aikeep |unlet {a:vt}netrw_aikeep |endif + if exists("{a:vt}netrw_awkeep") |let &l:aw = {a:vt}netrw_awkeep |unlet {a:vt}netrw_awkeep |endif + if g:netrw_liststyle != s:TREELIST + if exists("{a:vt}netrw_bhkeep") |let &l:bh = {a:vt}netrw_bhkeep |unlet {a:vt}netrw_bhkeep |endif + endif + if exists("{a:vt}netrw_blkeep") |let &l:bl = {a:vt}netrw_blkeep |unlet {a:vt}netrw_blkeep |endif + if exists("{a:vt}netrw_btkeep") |let &l:bt = {a:vt}netrw_btkeep |unlet {a:vt}netrw_btkeep |endif + if exists("{a:vt}netrw_bombkeep") |let &l:bomb = {a:vt}netrw_bombkeep |unlet {a:vt}netrw_bombkeep |endif + if exists("{a:vt}netrw_cedit") |let &cedit = {a:vt}netrw_cedit |unlet {a:vt}netrw_cedit |endif + if exists("{a:vt}netrw_cikeep") |let &l:ci = {a:vt}netrw_cikeep |unlet {a:vt}netrw_cikeep |endif + if exists("{a:vt}netrw_cinkeep") |let &l:cin = {a:vt}netrw_cinkeep |unlet {a:vt}netrw_cinkeep |endif + if exists("{a:vt}netrw_cinokeep") |let &l:cino = {a:vt}netrw_cinokeep |unlet {a:vt}netrw_cinokeep |endif + if exists("{a:vt}netrw_comkeep") |let &l:com = {a:vt}netrw_comkeep |unlet {a:vt}netrw_comkeep |endif + if exists("{a:vt}netrw_cpokeep") |let &l:cpo = {a:vt}netrw_cpokeep |unlet {a:vt}netrw_cpokeep |endif + if exists("{a:vt}netrw_diffkeep") |let &l:diff = {a:vt}netrw_diffkeep |unlet {a:vt}netrw_diffkeep |endif + if exists("{a:vt}netrw_fenkeep") |let &l:fen = {a:vt}netrw_fenkeep |unlet {a:vt}netrw_fenkeep |endif + if exists("{a:vt}netrw_ffkeep") |let &l:ff = {a:vt}netrw_ffkeep |unlet {a:vt}netrw_ffkeep |endif + if exists("{a:vt}netrw_fokeep") |let &l:fo = {a:vt}netrw_fokeep |unlet {a:vt}netrw_fokeep |endif + if exists("{a:vt}netrw_gdkeep") |let &l:gd = {a:vt}netrw_gdkeep |unlet {a:vt}netrw_gdkeep |endif + if exists("{a:vt}netrw_hidkeep") |let &l:hidden = {a:vt}netrw_hidkeep |unlet {a:vt}netrw_hidkeep |endif + if exists("{a:vt}netrw_imkeep") |let &l:im = {a:vt}netrw_imkeep |unlet {a:vt}netrw_imkeep |endif + if exists("{a:vt}netrw_iskkeep") |let &l:isk = {a:vt}netrw_iskkeep |unlet {a:vt}netrw_iskkeep |endif + if exists("{a:vt}netrw_lskeep") |let &l:ls = {a:vt}netrw_lskeep |unlet {a:vt}netrw_lskeep |endif + if exists("{a:vt}netrw_makeep") |let &l:ma = {a:vt}netrw_makeep |unlet {a:vt}netrw_makeep |endif + if exists("{a:vt}netrw_magickeep")|let &l:magic = {a:vt}netrw_magickeep |unlet {a:vt}netrw_magickeep|endif + if exists("{a:vt}netrw_modkeep") |let &l:mod = {a:vt}netrw_modkeep |unlet {a:vt}netrw_modkeep |endif + if exists("{a:vt}netrw_nukeep") |let &l:nu = {a:vt}netrw_nukeep |unlet {a:vt}netrw_nukeep |endif + if exists("{a:vt}netrw_repkeep") |let &l:report = {a:vt}netrw_repkeep |unlet {a:vt}netrw_repkeep |endif + if exists("{a:vt}netrw_rokeep") |let &l:ro = {a:vt}netrw_rokeep |unlet {a:vt}netrw_rokeep |endif + if exists("{a:vt}netrw_selkeep") |let &l:sel = {a:vt}netrw_selkeep |unlet {a:vt}netrw_selkeep |endif + if exists("{a:vt}netrw_spellkeep")|let &l:spell = {a:vt}netrw_spellkeep |unlet {a:vt}netrw_spellkeep|endif + if has("clipboard") + if exists("{a:vt}netrw_starkeep") |let @* = {a:vt}netrw_starkeep |unlet {a:vt}netrw_starkeep |endif + endif + " Problem: start with liststyle=0; press <i> : result, following line resets l:ts. +" if exists("{a:vt}netrw_tskeep") |let &l:ts = {a:vt}netrw_tskeep |unlet {a:vt}netrw_tskeep |endif + if exists("{a:vt}netrw_twkeep") |let &l:tw = {a:vt}netrw_twkeep |unlet {a:vt}netrw_twkeep |endif + if exists("{a:vt}netrw_wigkeep") |let &l:wig = {a:vt}netrw_wigkeep |unlet {a:vt}netrw_wigkeep |endif + if exists("{a:vt}netrw_wrapkeep") |let &l:wrap = {a:vt}netrw_wrapkeep |unlet {a:vt}netrw_wrapkeep |endif + if exists("{a:vt}netrw_writekeep")|let &l:write = {a:vt}netrw_writekeep |unlet {a:vt}netrw_writekeep|endif + if exists("s:yykeep") |let @@ = s:yykeep |unlet s:yykeep |endif + if exists("{a:vt}netrw_swfkeep") + if &directory == "" + " user hasn't specified a swapfile directory; + " netrw will temporarily set the swapfile directory + " to the current directory as returned by getcwd(). + let &l:directory= getcwd() + sil! let &l:swf = {a:vt}netrw_swfkeep + setl directory= + unlet {a:vt}netrw_swfkeep + elseif &l:swf != {a:vt}netrw_swfkeep + " following line causes a Press ENTER in windows -- can't seem to work around it!!! + sil! let &l:swf= {a:vt}netrw_swfkeep + unlet {a:vt}netrw_swfkeep + endif + endif + if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir + let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g') + if exists("{a:vt}netrw_dirkeep") + call s:NetrwLcd(dirkeep) + unlet {a:vt}netrw_dirkeep + endif + endif + if has("clipboard") + if exists("{a:vt}netrw_regstar") |sil! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif + endif + if exists("{a:vt}netrw_regslash")|sil! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif + if exists("s:nbcd_curpos_{bufnr('%')}") +" call Decho("restoring previous position (s:nbcd_curpos_".bufnr('%')." exists)") + keepj call netrw#RestorePosn(s:nbcd_curpos_{bufnr('%')}) +" call Decho("unlet s:nbcd_curpos_".bufnr('%')) + if exists("s:nbcd_curpos_".bufnr('%')) + unlet s:nbcd_curpos_{bufnr('%')} + endif + else +" call Decho("no previous position") + endif + +" call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) +" call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")) +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist")) +" call Decho("ts=".&l:ts) + " Moved the filetype detect here from NetrwGetFile() because remote files + " were having their filetype detect-generated settings overwritten by + " NetrwOptionRestore. + if &ft != "netrw" +" call Decho("filetype detect (ft=".&ft.")") + filetype detect + endif +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) +" call Dret("s:NetrwOptionRestore : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) +endfun + +" --------------------------------------------------------------------- +" s:NetrwOptionSave: save options prior to setting to "netrw-buffer-standard" form {{{2 +" Options get restored by s:NetrwOptionRestore() +" 06/08/07 : removed call to NetrwSafeOptions(), either placed +" immediately after NetrwOptionSave() calls in NetRead +" and NetWrite, or after the s:NetrwEnew() call in +" NetrwBrowse. +" vt: normally its "w:" or "s:" (a variable type) +fun! s:NetrwOptionSave(vt) +" call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$")." mod=".&mod." ma=".&ma) +" call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist")) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) + + if !exists("{a:vt}netrw_optionsave") + let {a:vt}netrw_optionsave= 1 + else +" call Dret("s:NetrwOptionSave : options already saved") + return + endif +" call Decho("prior to save: fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff) + + " Save current settings and current directory +" call Decho("saving current settings and current directory") + let s:yykeep = @@ + if exists("&l:acd")|let {a:vt}netrw_acdkeep = &l:acd|endif + let {a:vt}netrw_aikeep = &l:ai + let {a:vt}netrw_awkeep = &l:aw + let {a:vt}netrw_bhkeep = &l:bh + let {a:vt}netrw_blkeep = &l:bl +" let {a:vt}netrw_btkeep = &l:bt + let {a:vt}netrw_bombkeep = &l:bomb + let {a:vt}netrw_cedit = &cedit + let {a:vt}netrw_cikeep = &l:ci + let {a:vt}netrw_cinkeep = &l:cin + let {a:vt}netrw_cinokeep = &l:cino + let {a:vt}netrw_comkeep = &l:com + let {a:vt}netrw_cpokeep = &l:cpo + let {a:vt}netrw_diffkeep = &l:diff + let {a:vt}netrw_fenkeep = &l:fen + let {a:vt}netrw_ffkeep = &l:ff + let {a:vt}netrw_fokeep = &l:fo " formatoptions + let {a:vt}netrw_gdkeep = &l:gd " gdefault + let {a:vt}netrw_hidkeep = &l:hidden + let {a:vt}netrw_imkeep = &l:im + let {a:vt}netrw_iskkeep = &l:isk + let {a:vt}netrw_lskeep = &l:ls + let {a:vt}netrw_makeep = &l:ma + let {a:vt}netrw_magickeep = &l:magic + let {a:vt}netrw_modkeep = &l:mod + let {a:vt}netrw_nukeep = &l:nu + let {a:vt}netrw_repkeep = &l:report + let {a:vt}netrw_rokeep = &l:ro + let {a:vt}netrw_selkeep = &l:sel + let {a:vt}netrw_spellkeep = &l:spell + if g:netrw_use_noswf + let {a:vt}netrw_swfkeep = &l:swf + endif + if has("clipboard") + let {a:vt}netrw_starkeep = @* + endif + let {a:vt}netrw_tskeep = &l:ts + let {a:vt}netrw_twkeep = &l:tw " textwidth + let {a:vt}netrw_wigkeep = &l:wig " wildignore + let {a:vt}netrw_wrapkeep = &l:wrap + let {a:vt}netrw_writekeep = &l:write + + " save a few selected netrw-related variables +" call Decho("saving a few selected netrw-related variables") + if g:netrw_keepdir + let {a:vt}netrw_dirkeep = getcwd() + endif + if has("clipboard") + if &go =~# 'a' | sil! let {a:vt}netrw_regstar = @* | endif + endif + sil! let {a:vt}netrw_regslash= @/ + +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) +" call Dret("s:NetrwOptionSave : tab#".tabpagenr()." win#".winnr()) +endfun + +" ------------------------------------------------------------------------ +" s:NetrwSafeOptions: sets options to help netrw do its job {{{2 +" Use s:NetrwSaveOptions() to save user settings +" Use s:NetrwOptionRestore() to restore user settings +fun! s:NetrwSafeOptions() +" call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%"))."> winnr($)=".winnr("$")) +" call Decho("win#".winnr()."'s ft=".&ft) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) + if exists("+acd") | setl noacd | endif + setl noai + setl noaw + setl nobl + setl nobomb + setl bt=nofile + setl noci + setl nocin + if g:netrw_liststyle == s:TREELIST + setl bh=hide + endif + setl cino= + setl com= + setl cpo-=a + setl cpo-=A + setl fo=nroql2 + setl nohid + setl noim + setl isk+=@ isk+=* isk+=/ + setl magic + if g:netrw_use_noswf + setl noswf + endif + setl report=10000 + setl sel=inclusive + setl nospell + setl tw=0 + setl wig= + setl cedit& + call s:NetrwCursor() + + " allow the user to override safe options +" call Decho("ft<".&ft."> ei=".&ei) + if &ft == "netrw" +" call Decho("do any netrw FileType autocmds (doau FileType netrw)") + sil! keepalt keepj doau FileType netrw + endif + +" call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." bh=".&l:bh) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Dret("s:NetrwSafeOptions") endfun " --------------------------------------------------------------------- @@ -1648,6 +1730,7 @@ fun! netrw#NetRead(mode,...) echomsg ':Nread fetch://machine/path uses fetch' echomsg ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>' echomsg ':Nread http://[user@]machine/path uses http wget' + echomsg ':Nread https://[user@]machine/path uses http wget' echomsg ':Nread rcp://[user@]machine/path uses rcp' echomsg ':Nread rsync://machine[:port]/path uses rsync' echomsg ':Nread scp://[user@]machine[[:#]port]/path uses scp' @@ -1867,11 +1950,11 @@ fun! netrw#NetRead(mode,...) " using g:netrw_http_cmd (usually elinks, links, curl, wget, or fetch) " call Decho('using '.g:netrw_http_cmd.' (# not in b:netrw_fname<'.b:netrw_fname.">)") if exists("g:netrw_http_xcmd") -" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)) - exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1) +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(b:netrw_http."://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)) + exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(b:netrw_http."://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1) else -" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)) - exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1) +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape(b:netrw_http."://".g:netrw_machine.b:netrw_fname,1)) + exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape(b:netrw_http."://".g:netrw_machine.b:netrw_fname,1) endif let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) @@ -1882,14 +1965,14 @@ fun! netrw#NetRead(mode,...) let netrw_tag = substitute(b:netrw_fname,"^.*#","","") " call Decho("netrw_html<".netrw_html.">") " call Decho("netrw_tag <".netrw_tag.">") -" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)) - exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1) +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape(b:netrw_http."://".g:netrw_machine.netrw_html,1)) + exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape(b:netrw_http."://".g:netrw_machine.netrw_html,1) let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) " call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/') exe 'keepj norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>" endif let b:netrw_lastfile = choice -" call Decho("(NetRead) setl ro") +" call Decho("setl ro") setl ro "......................................... @@ -1951,7 +2034,7 @@ fun! netrw#NetRead(mode,...) " call Dret("NetRead") return endif - if exists("g:netrw_option") && g:netrw_option == ":https\=" + if exists("g:netrw_option") && g:netrw_option =~ ":https\=" let netrw_option= "http" else let netrw_option= "ftp" @@ -1968,7 +2051,7 @@ fun! netrw#NetRead(mode,...) let result = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method) let b:netrw_lastfile = choice -" call Decho("(NetRead) setl ro") +" call Decho("setl ro") setl ro "......................................... @@ -2375,12 +2458,12 @@ fun! netrw#NetWrite(...) range if a:firstline == 1 && a:lastline == line("$") " restore modifiability; usually equivalent to set nomod let &mod= mod -" call Decho("(NetWrite) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") elseif !exists("leavemod") " indicate that the buffer has not been modified since last written -" call Decho("(NetWrite) set nomod") - set nomod -" call Decho("(NetWrite) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("set nomod") + setl nomod +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") endif " call Dret("netrw#NetWrite") @@ -2409,11 +2492,11 @@ fun! netrw#NetSource(...) let i= 1 while i <= a:0 call netrw#NetRead(3,a:{i}) -" call Decho("(netrw#NetSource) s:netread_tmpfile<".s:netrw_tmpfile.">") +" call Decho("s:netread_tmpfile<".s:netrw_tmpfile.">") if s:FileReadable(s:netrw_tmpfile) -" call Decho("(netrw#NetSource) exe so ".fnameescape(s:netrw_tmpfile)) +" call Decho("exe so ".fnameescape(s:netrw_tmpfile)) exe "so ".fnameescape(s:netrw_tmpfile) -" call Decho("(netrw#NetSource) delete(".s:netrw_tmpfile.")") +" call Decho("delete(".s:netrw_tmpfile.")") call delete(s:netrw_tmpfile) unlet s:netrw_tmpfile else @@ -2426,33 +2509,46 @@ fun! netrw#NetSource(...) endfun " --------------------------------------------------------------------- -" netrw#NetrwSetTreetop: resets the tree top to the current directory/specified directory {{{2 -fun! netrw#NetrwSetTreetop(...) -" call Dfunc("netrw#NetrwSetTreetop(".((a:0 > 0)? a:1 : "").") a:0=".a:0) +" netrw#SetTreetop: resets the tree top to the current directory/specified directory {{{2 +" (implements the :Ntree command) +fun! netrw#SetTreetop(...) +" call Dfunc("netrw#SetTreetop(".((a:0 > 0)? a:1 : "").") a:0=".a:0) + " clear out the current tree if exists("w:netrw_treetop") +" call Decho("clearing out current tree") let inittreetop= w:netrw_treetop unlet w:netrw_treetop endif if exists("w:netrw_treedict") +" call Decho("freeing w:netrw_treedict") unlet w:netrw_treedict endif - if a:1 == "" + + if a:1 == "" && exists("inittreetop") let treedir= s:NetrwTreePath(inittreetop) +" call Decho("treedir<".treedir.">") else if isdirectory(a:1) +" call Decho("a:1<".a:1."> is a directory") let treedir= a:1 elseif exists("b:netrw_curdir") && isdirectory(b:netrw_curdir."/".a:1) let treedir= b:netrw_curdir."/".a:1 +" call Decho("a:1<".a:1."> is NOT a directory, trying treedir<".treedir.">") else call netrw#ErrorMsg(s:ERROR,"sorry, ".a:1." doesn't seem to be a directory!",95) -" call Dret("netrw#NetrwSetTreetop") - return + let treedir= "." endif endif " call Decho("treedir<".treedir.">") - sil! call netrw#LocalBrowseCheck(treedir) -" call Dret("netrw#NetrwSetTreetop") + let islocal= expand("%") !~ '^\a\+://' +" call Decho("islocal=".islocal) + if islocal + call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(islocal,treedir)) + else + call s:NetrwBrowse(islocal,s:NetrwBrowseChgDir(islocal,treedir)) + endif +" call Dret("netrw#SetTreetop") endfun " =========================================== @@ -2466,7 +2562,7 @@ fun! s:NetrwGetFile(readcmd, tfile, method) " readcmd=='t': simply do nothing if a:readcmd == 't' -" call Decho("(NetrwGetFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("NetrwGetFile : skip read of <".a:tfile.">") return endif @@ -2527,7 +2623,6 @@ fun! s:NetrwGetFile(readcmd, tfile, method) " call Decho("detect filetype of local version of remote file") let iskkeep= &l:isk setl isk-=/ - " filetype detect " COMBAK - trying filetype detect in NetrwOptionRestore Jan 24, 2013 let &l:isk= iskkeep " call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!") let line1 = 1 @@ -2551,7 +2646,7 @@ fun! s:NetrwGetFile(readcmd, tfile, method) else " not readable -" call Decho("(NetrwGetFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Decho("tfile<".a:tfile."> not readable") keepj call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9) " call Dret("NetrwGetFile : tfile<".a:tfile."> not readable") @@ -2576,7 +2671,7 @@ fun! s:NetrwGetFile(readcmd, tfile, method) " make sure file is being displayed " redraw! -" call Decho("(NetrwGetFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("NetrwGetFile") endfun @@ -2682,10 +2777,11 @@ fun! s:NetrwMethod(choice) " Method#5: http[s]://user@hostname/...path-to-file {{{3 elseif match(a:choice,httpurm) == 0 -" call Decho("http://...") +" call Decho("http[s]://...") let b:netrw_method = 5 let g:netrw_machine= substitute(a:choice,httpurm,'\1',"") let b:netrw_fname = substitute(a:choice,httpurm,'\2',"") + let b:netrw_http = (a:choice =~ '^https:')? "https" : "http" " Method#6: dav://hostname[:port]/..path-to-file.. {{{3 elseif match(a:choice,davurm) == 0 @@ -2919,6 +3015,7 @@ fun! NetUserPass(...) if a:1 =~ '^ftp:' " get host from ftp:... url " access userid and password from hup (host-user-passwd) dictionary +" call Decho("case a:0=1: a:1<".a:1."> (get host from ftp:... url)") let host = substitute(a:1,'^ftp:','','') let host = substitute(host,'\..*','','') if exists("s:netrw_hup[host]") @@ -2933,8 +3030,13 @@ fun! NetUserPass(...) else " case: one input argument, not an url. Using it as a new user-id. +" call Decho("case a:0=1: a:1<".a:1."> (get host from input argument, not an url)") if exists("g:netrw_machine") - let host= substitute(g:netrw_machine,'\..*$','','') + if g:netrw_machine =~ '[0-9.]\+' + let host= g:netrw_machine + else + let host= substitute(g:netrw_machine,'\..*$','','') + endif else let g:netrw_machine= input('Enter hostname: ') endif @@ -2984,341 +3086,6 @@ endfun " =========================================== " --------------------------------------------------------------------- -" s:NetrwMaps: {{{2 -fun! s:NetrwMaps(islocal) -" call Dfunc("s:NetrwMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">") - - " set up Rexplore and [ 2-leftmouse-click -or- c-leftmouse ] -" call Decho("(NetrwMaps) set up Rexplore command") - com! Rexplore if exists("w:netrw_rexlocal")|call s:NetrwRexplore(w:netrw_rexlocal,exists("w:netrw_rexdir")? w:netrw_rexdir : ".")|else|call netrw#ErrorMsg(s:WARNING,"not a former netrw window",79)|endif - if g:netrw_mousemaps && g:netrw_retmap -" call Decho("(NetrwMaps) set up Rexplore 2-leftmouse") - if !hasmapto("<Plug>NetrwReturn") - if maparg("<2-leftmouse>","n") == "" || maparg("<2-leftmouse>","n") =~ '^-$' -" call Decho("(NetrwMaps) making map for 2-leftmouse") - nmap <unique> <silent> <2-leftmouse> <Plug>NetrwReturn - elseif maparg("<c-leftmouse>","n") == "" -" call Decho("(NetrwMaps) making map for c-leftmouse") - nmap <unique> <silent> <c-leftmouse> <Plug>NetrwReturn - endif - endif - nno <silent> <Plug>NetrwReturn :Rexplore<cr> -" call Decho("(NetrwMaps) made <Plug>NetrwReturn map") - endif - - if a:islocal -" call Decho("(NetrwMaps) make local maps") - " local normal-mode maps - nnoremap <buffer> <silent> a :call <SID>NetrwHide(1)<cr> - nnoremap <buffer> <silent> % :call <SID>NetrwOpenFile(1)<cr> - nnoremap <buffer> <silent> c :exe "keepj lcd ".fnameescape(b:netrw_curdir)<cr> - nnoremap <buffer> <silent> C :let g:netrw_chgwin= winnr()<cr> - nnoremap <buffer> <silent> <cr> :call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr> - nnoremap <buffer> <silent> d :call <SID>NetrwMakeDir("")<cr> - nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr> - nnoremap <buffer> <silent> gb :<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr> - nnoremap <buffer> <silent> gd :<c-u>call <SID>NetrwForceChgDir(1,<SID>NetrwGetWord())<cr> - nnoremap <buffer> <silent> gf :<c-u>call <SID>NetrwForceFile(1,<SID>NetrwGetWord())<cr> - nnoremap <buffer> <silent> gh :<c-u>call <SID>NetrwHidden(1)<cr> - nnoremap <buffer> <silent> gp :<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr> - nnoremap <buffer> <silent> I :call <SID>NetrwBannerCtrl(1)<cr> - nnoremap <buffer> <silent> i :call <SID>NetrwListStyle(1)<cr> - nnoremap <buffer> <silent> mb :<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr> - nnoremap <buffer> <silent> mB :<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr> - nnoremap <buffer> <silent> mc :<c-u>call <SID>NetrwMarkFileCopy(1)<cr> - nnoremap <buffer> <silent> md :<c-u>call <SID>NetrwMarkFileDiff(1)<cr> - nnoremap <buffer> <silent> me :<c-u>call <SID>NetrwMarkFileEdit(1)<cr> - nnoremap <buffer> <silent> mf :<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr> - nnoremap <buffer> <silent> mF :<c-u>call <SID>NetrwUnmarkList(bufnr("%"),b:netrw_curdir)<cr> - nnoremap <buffer> <silent> mg :<c-u>call <SID>NetrwMarkFileGrep(1)<cr> - nnoremap <buffer> <silent> mh :<c-u>call <SID>NetrwMarkHideSfx(1)<cr> - nnoremap <buffer> <silent> mm :<c-u>call <SID>NetrwMarkFileMove(1)<cr> - nnoremap <buffer> <silent> mp :<c-u>call <SID>NetrwMarkFilePrint(1)<cr> - nnoremap <buffer> <silent> mr :<c-u>call <SID>NetrwMarkFileRegexp(1)<cr> - nnoremap <buffer> <silent> ms :<c-u>call <SID>NetrwMarkFileSource(1)<cr> - nnoremap <buffer> <silent> mt :<c-u>call <SID>NetrwMarkFileTgt(1)<cr> - nnoremap <buffer> <silent> mT :<c-u>call <SID>NetrwMarkFileTag(1)<cr> - nnoremap <buffer> <silent> mu :<c-u>call <SID>NetrwUnMarkFile(1)<cr> - nnoremap <buffer> <silent> mx :<c-u>call <SID>NetrwMarkFileExe(1)<cr> - nnoremap <buffer> <silent> mX :<c-u>call <SID>NetrwMarkFileVimCmd(1)<cr> - nnoremap <buffer> <silent> mz :<c-u>call <SID>NetrwMarkFileCompress(1)<cr> - nnoremap <buffer> <silent> O :call <SID>NetrwObtain(1)<cr> - nnoremap <buffer> <silent> o :call <SID>NetrwSplit(3)<cr> - nnoremap <buffer> <silent> p :call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr> - nnoremap <buffer> <silent> P :call <SID>NetrwPrevWinOpen(1)<cr> - nnoremap <buffer> <silent> qb :<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr> - nnoremap <buffer> <silent> qf :<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr> - nnoremap <buffer> <silent> qF :<c-u>call <SID>NetrwMarkFileQFEL(1,getqflist())<cr> - nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr> - nnoremap <buffer> <silent> s :call <SID>NetrwSortStyle(1)<cr> - nnoremap <buffer> <silent> S :call <SID>NetSortSequence(1)<cr> - nnoremap <buffer> <silent> t :call <SID>NetrwSplit(4)<cr> - nnoremap <buffer> <silent> Tb :<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr> - nnoremap <buffer> <silent> Th :<c-u>call <SID>NetrwSetTgt('h',v:count)<cr> - nnoremap <buffer> <silent> u :<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr> - nnoremap <buffer> <silent> U :<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr> - nnoremap <buffer> <silent> v :call <SID>NetrwSplit(5)<cr> - nnoremap <buffer> <silent> x :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr> - nnoremap <buffer> <silent> X :call <SID>NetrwLocalExecute(expand("<cword>"))"<cr> - " local insert-mode maps - inoremap <buffer> <silent> a <c-o>:call <SID>NetrwHide(1)<cr> - inoremap <buffer> <silent> c <c-o>:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr> - inoremap <buffer> <silent> C <c-o>:let g:netrw_chgwin= winnr()<cr> - inoremap <buffer> <silent> % <c-o>:call <SID>NetrwOpenFile(1)<cr> - inoremap <buffer> <silent> - <c-o>:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr> - inoremap <buffer> <silent> <cr> <c-o>:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr> - inoremap <buffer> <silent> d <c-o>:call <SID>NetrwMakeDir("")<cr> - inoremap <buffer> <silent> gb <c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr> - inoremap <buffer> <silent> gh <c-o>:<c-u>call <SID>NetrwHidden(1)<cr> - inoremap <buffer> <silent> gp <c-o>:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr> - inoremap <buffer> <silent> I <c-o>:call <SID>NetrwBannerCtrl(1)<cr> - inoremap <buffer> <silent> i <c-o>:call <SID>NetrwListStyle(1)<cr> - inoremap <buffer> <silent> mb <c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr> - inoremap <buffer> <silent> mB <c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr> - inoremap <buffer> <silent> mc <c-o>:<c-u>call <SID>NetrwMarkFileCopy(1)<cr> - inoremap <buffer> <silent> md <c-o>:<c-u>call <SID>NetrwMarkFileDiff(1)<cr> - inoremap <buffer> <silent> me <c-o>:<c-u>call <SID>NetrwMarkFileEdit(1)<cr> - inoremap <buffer> <silent> mf <c-o>:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr> - inoremap <buffer> <silent> mg <c-o>:<c-u>call <SID>NetrwMarkFileGrep(1)<cr> - inoremap <buffer> <silent> mh <c-o>:<c-u>call <SID>NetrwMarkHideSfx(1)<cr> - inoremap <buffer> <silent> mm <c-o>:<c-u>call <SID>NetrwMarkFileMove(1)<cr> - inoremap <buffer> <silent> mp <c-o>:<c-u>call <SID>NetrwMarkFilePrint(1)<cr> - inoremap <buffer> <silent> mr <c-o>:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr> - inoremap <buffer> <silent> ms <c-o>:<c-u>call <SID>NetrwMarkFileSource(1)<cr> - inoremap <buffer> <silent> mT <c-o>:<c-u>call <SID>NetrwMarkFileTag(1)<cr> - inoremap <buffer> <silent> mt <c-o>:<c-u>call <SID>NetrwMarkFileTgt(1)<cr> - inoremap <buffer> <silent> mu <c-o>:<c-u>call <SID>NetrwUnMarkFile(1)<cr> - inoremap <buffer> <silent> mx <c-o>:<c-u>call <SID>NetrwMarkFileExe(1)<cr> - inoremap <buffer> <silent> mX <c-o>:<c-u>call <SID>NetrwMarkFileVimCmd(1)<cr> - inoremap <buffer> <silent> mz <c-o>:<c-u>call <SID>NetrwMarkFileCompress(1)<cr> - inoremap <buffer> <silent> O <c-o>:call <SID>NetrwObtain(1)<cr> - inoremap <buffer> <silent> o <c-o>:call <SID>NetrwSplit(3)<cr> - inoremap <buffer> <silent> p <c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr> - inoremap <buffer> <silent> P <c-o>:call <SID>NetrwPrevWinOpen(1)<cr> - inoremap <buffer> <silent> qb <c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr> - inoremap <buffer> <silent> qf <c-o>:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr> - inoremap <buffer> <silent> qF :<c-u>call <SID>NetrwMarkFileQFEL(1,getqflist())<cr> - inoremap <buffer> <silent> r <c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr> - inoremap <buffer> <silent> s <c-o>:call <SID>NetrwSortStyle(1)<cr> - inoremap <buffer> <silent> S <c-o>:call <SID>NetSortSequence(1)<cr> - inoremap <buffer> <silent> t <c-o>:call <SID>NetrwSplit(4)<cr> - inoremap <buffer> <silent> Tb <c-o>:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr> - inoremap <buffer> <silent> Th <c-o>:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr> - inoremap <buffer> <silent> u <c-o>:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr> - inoremap <buffer> <silent> U <c-o>:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr> - inoremap <buffer> <silent> v <c-o>:call <SID>NetrwSplit(5)<cr> - inoremap <buffer> <silent> x <c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr> - if !hasmapto('<Plug>NetrwHideEdit') - nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit - imap <buffer> <unique> <c-h> <Plug>NetrwHideEdit - endif - nnoremap <buffer> <silent> <Plug>NetrwHideEdit :call <SID>NetrwHideEdit(1)<cr> - if !hasmapto('<Plug>NetrwRefresh') - nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh - imap <buffer> <unique> <c-l> <Plug>NetrwRefresh - endif - nnoremap <buffer> <silent> <Plug>NetrwRefresh :call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr> - if s:didstarstar || !mapcheck("<s-down>","n") - nnoremap <buffer> <silent> <s-down> :Nexplore<cr> - inoremap <buffer> <silent> <s-down> :Nexplore<cr> - endif - if s:didstarstar || !mapcheck("<s-up>","n") - nnoremap <buffer> <silent> <s-up> :Pexplore<cr> - inoremap <buffer> <silent> <s-up> :Pexplore<cr> - endif - let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape) - if g:netrw_mousemaps == 1 - nmap <buffer> <leftmouse> <Plug>NetrwLeftmouse - nno <buffer> <silent> <Plug>NetrwLeftmouse <leftmouse>:call <SID>NetrwLeftmouse(1)<cr> - nmap <buffer> <middlemouse> <Plug>NetrwMiddlemouse - nno <buffer> <silent> <Plug>NetrwMiddlemouse <leftmouse>:call <SID>NetrwPrevWinOpen(1)<cr> - nmap <buffer> <s-leftmouse> <Plug>NetrwSLeftmouse - nno <buffer> <silent> <Plug>NetrwSLeftmouse <leftmouse>:call <SID>NetrwSLeftmouse(1)<cr> - nmap <buffer> <s-leftdrag> <Plug>NetrwSLeftdrag - nno <buffer> <silent> <Plug>NetrwSLeftdrag <leftmouse>:call <SID>NetrwSLeftdrag(1)<cr> - nmap <buffer> <2-leftmouse> <Plug>Netrw2Leftmouse - nmap <buffer> <silent> <Plug>Netrw2Leftmouse - - imap <buffer> <leftmouse> <Plug>ILeftmouse - ino <buffer> <silent> <Plug>ILeftmouse <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(1)<cr> - imap <buffer> <middlemouse> <Plug>IMiddlemouse - ino <buffer> <silent> <Plug>IMiddlemouse <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(1)<cr> - imap <buffer> <s-leftmouse> <Plug>ISLeftmouse - ino <buffer> <silent> <Plug>ISLeftmouse <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr> - exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' - exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' - exe 'inoremap <buffer> <silent> <rightmouse> <c-o><leftmouse><c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' - endif - exe 'nnoremap <buffer> <silent> <del> :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' - exe 'nnoremap <buffer> <silent> D :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' - exe 'nnoremap <buffer> <silent> R :call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>' - exe 'nnoremap <buffer> <silent> d :call <SID>NetrwMakeDir("")<cr>' - exe 'vnoremap <buffer> <silent> <del> :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' - exe 'vnoremap <buffer> <silent> D :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' - exe 'vnoremap <buffer> <silent> R :call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>' - exe 'inoremap <buffer> <silent> <del> <c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' - exe 'inoremap <buffer> <silent> D <c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' - exe 'inoremap <buffer> <silent> R <c-o>:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>' - exe 'inoremap <buffer> <silent> d <c-o>:call <SID>NetrwMakeDir("")<cr>' - nnoremap <buffer> <F1> :he netrw-quickhelp<cr> - - else " remote -" call Decho("(NetrwMaps) make remote maps") - call s:RemotePathAnalysis(b:netrw_curdir) - " remote normal-mode maps - nnoremap <buffer> <silent> <cr> :call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr> - nnoremap <buffer> <silent> <c-l> :call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> - nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr> - nnoremap <buffer> <silent> a :call <SID>NetrwHide(0)<cr> - nnoremap <buffer> <silent> mb :<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr> - nnoremap <buffer> <silent> mc :<c-u>call <SID>NetrwMarkFileCopy(0)<cr> - nnoremap <buffer> <silent> md :<c-u>call <SID>NetrwMarkFileDiff(0)<cr> - nnoremap <buffer> <silent> me :<c-u>call <SID>NetrwMarkFileEdit(0)<cr> - nnoremap <buffer> <silent> mf :<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr> - nnoremap <buffer> <silent> mF :<c-u>call <SID>NetrwUnmarkList(bufnr("%"),b:netrw_curdir)<cr> - nnoremap <buffer> <silent> mg :<c-u>call <SID>NetrwMarkFileGrep(0)<cr> - nnoremap <buffer> <silent> mh :<c-u>call <SID>NetrwMarkHideSfx(0)<cr> - nnoremap <buffer> <silent> mm :<c-u>call <SID>NetrwMarkFileMove(0)<cr> - nnoremap <buffer> <silent> mp :<c-u>call <SID>NetrwMarkFilePrint(0)<cr> - nnoremap <buffer> <silent> mr :<c-u>call <SID>NetrwMarkFileRegexp(0)<cr> - nnoremap <buffer> <silent> ms :<c-u>call <SID>NetrwMarkFileSource(0)<cr> - nnoremap <buffer> <silent> mt :<c-u>call <SID>NetrwMarkFileTgt(0)<cr> - nnoremap <buffer> <silent> mT :<c-u>call <SID>NetrwMarkFileTag(0)<cr> - nnoremap <buffer> <silent> mu :<c-u>call <SID>NetrwUnMarkFile(0)<cr> - nnoremap <buffer> <silent> mx :<c-u>call <SID>NetrwMarkFileExe(0)<cr> - nnoremap <buffer> <silent> mX :<c-u>call <SID>NetrwMarkFileVimCmd(0)<cr> - nnoremap <buffer> <silent> mz :<c-u>call <SID>NetrwMarkFileCompress(0)<cr> - nnoremap <buffer> <silent> gb :<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr> - nnoremap <buffer> <silent> gd :<c-u>call <SID>NetrwForceChgDir(0,<SID>NetrwGetWord())<cr> - nnoremap <buffer> <silent> gf :<c-u>call <SID>NetrwForceFile(0,<SID>NetrwGetWord())<cr> - nnoremap <buffer> <silent> gh :<c-u>call <SID>NetrwHidden(0)<cr> - nnoremap <buffer> <silent> gp :<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr> - nnoremap <buffer> <silent> C :let g:netrw_chgwin= winnr()<cr> - nnoremap <buffer> <silent> i :call <SID>NetrwListStyle(0)<cr> - nnoremap <buffer> <silent> I :call <SID>NetrwBannerCtrl(1)<cr> - nnoremap <buffer> <silent> o :call <SID>NetrwSplit(0)<cr> - nnoremap <buffer> <silent> O :call <SID>NetrwObtain(0)<cr> - nnoremap <buffer> <silent> p :call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr> - nnoremap <buffer> <silent> P :call <SID>NetrwPrevWinOpen(0)<cr> - nnoremap <buffer> <silent> qb :<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr> - nnoremap <buffer> <silent> mB :<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr> - nnoremap <buffer> <silent> qf :<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr> - nnoremap <buffer> <silent> qF :<c-u>call <SID>NetrwMarkFileQFEL(0,getqflist())<cr> - nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> - nnoremap <buffer> <silent> s :call <SID>NetrwSortStyle(0)<cr> - nnoremap <buffer> <silent> S :call <SID>NetSortSequence(0)<cr> - nnoremap <buffer> <silent> t :call <SID>NetrwSplit(1)<cr> - nnoremap <buffer> <silent> Tb :<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr> - nnoremap <buffer> <silent> Th :<c-u>call <SID>NetrwSetTgt('h',v:count)<cr> - nnoremap <buffer> <silent> u :<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr> - nnoremap <buffer> <silent> U :<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr> - nnoremap <buffer> <silent> v :call <SID>NetrwSplit(2)<cr> - nnoremap <buffer> <silent> x :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr> - nnoremap <buffer> <silent> % :call <SID>NetrwOpenFile(0)<cr> - " remote insert-mode maps - inoremap <buffer> <silent> <cr> <c-o>:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr> - inoremap <buffer> <silent> <c-l> <c-o>:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> - inoremap <buffer> <silent> - <c-o>:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr> - inoremap <buffer> <silent> a <c-o>:call <SID>NetrwHide(0)<cr> - inoremap <buffer> <silent> mb <c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr> - inoremap <buffer> <silent> mc <c-o>:<c-u>call <SID>NetrwMarkFileCopy(0)<cr> - inoremap <buffer> <silent> md <c-o>:<c-u>call <SID>NetrwMarkFileDiff(0)<cr> - inoremap <buffer> <silent> me <c-o>:<c-u>call <SID>NetrwMarkFileEdit(0)<cr> - inoremap <buffer> <silent> mf <c-o>:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr> - inoremap <buffer> <silent> mg <c-o>:<c-u>call <SID>NetrwMarkFileGrep(0)<cr> - inoremap <buffer> <silent> mh <c-o>:<c-u>call <SID>NetrwMarkHideSfx(0)<cr> - inoremap <buffer> <silent> mm <c-o>:<c-u>call <SID>NetrwMarkFileMove(0)<cr> - inoremap <buffer> <silent> mp <c-o>:<c-u>call <SID>NetrwMarkFilePrint(0)<cr> - inoremap <buffer> <silent> mr <c-o>:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr> - inoremap <buffer> <silent> ms <c-o>:<c-u>call <SID>NetrwMarkFileSource(0)<cr> - inoremap <buffer> <silent> mt <c-o>:<c-u>call <SID>NetrwMarkFileTgt(0)<cr> - inoremap <buffer> <silent> mT <c-o>:<c-u>call <SID>NetrwMarkFileTag(0)<cr> - inoremap <buffer> <silent> mu <c-o>:<c-u>call <SID>NetrwUnMarkFile(0)<cr> - inoremap <buffer> <silent> mx <c-o>:<c-u>call <SID>NetrwMarkFileExe(0)<cr> - inoremap <buffer> <silent> mX <c-o>:<c-u>call <SID>NetrwMarkFileVimCmd(0)<cr> - inoremap <buffer> <silent> mz <c-o>:<c-u>call <SID>NetrwMarkFileCompress(0)<cr> - inoremap <buffer> <silent> gb <c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr> - inoremap <buffer> <silent> gh <c-o>:<c-u>call <SID>NetrwHidden(0)<cr> - inoremap <buffer> <silent> gp <c-o>:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr> - inoremap <buffer> <silent> C <c-o>:let g:netrw_chgwin= winnr()<cr> - inoremap <buffer> <silent> i <c-o>:call <SID>NetrwListStyle(0)<cr> - inoremap <buffer> <silent> I <c-o>:call <SID>NetrwBannerCtrl(1)<cr> - inoremap <buffer> <silent> o <c-o>:call <SID>NetrwSplit(0)<cr> - inoremap <buffer> <silent> O <c-o>:call <SID>NetrwObtain(0)<cr> - inoremap <buffer> <silent> p <c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr> - inoremap <buffer> <silent> P <c-o>:call <SID>NetrwPrevWinOpen(0)<cr> - inoremap <buffer> <silent> qb <c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr> - inoremap <buffer> <silent> mB <c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr> - inoremap <buffer> <silent> qf <c-o>:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr> - inoremap <buffer> <silent> qF :<c-u>call <SID>NetrwMarkFileQFEL(0,getqflist())<cr> - inoremap <buffer> <silent> r <c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> - inoremap <buffer> <silent> s <c-o>:call <SID>NetrwSortStyle(0)<cr> - inoremap <buffer> <silent> S <c-o>:call <SID>NetSortSequence(0)<cr> - inoremap <buffer> <silent> t <c-o>:call <SID>NetrwSplit(1)<cr> - inoremap <buffer> <silent> Tb <c-o>:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr> - inoremap <buffer> <silent> Th <c-o>:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr> - inoremap <buffer> <silent> u <c-o>:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr> - inoremap <buffer> <silent> U <c-o>:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr> - inoremap <buffer> <silent> v <c-o>:call <SID>NetrwSplit(2)<cr> - inoremap <buffer> <silent> x <c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr> - inoremap <buffer> <silent> % <c-o>:call <SID>NetrwOpenFile(0)<cr> - if !hasmapto('<Plug>NetrwHideEdit') - nmap <buffer> <c-h> <Plug>NetrwHideEdit - imap <buffer> <c-h> <Plug>NetrwHideEdit - endif - nnoremap <buffer> <silent> <Plug>NetrwHideEdit :call <SID>NetrwHideEdit(0)<cr> - if !hasmapto('<Plug>NetrwRefresh') - nmap <buffer> <c-l> <Plug>NetrwRefresh - imap <buffer> <c-l> <Plug>NetrwRefresh - endif - - let mapsafepath = escape(s:path, s:netrw_map_escape) - let mapsafeusermach = escape(s:user.s:machine, s:netrw_map_escape) - - nnoremap <buffer> <silent> <Plug>NetrwRefresh :call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> - if g:netrw_mousemaps == 1 - nmap <leftmouse> <Plug>NetrwLeftmouse - nno <buffer> <silent> <Plug>NetrwLeftmouse <leftmouse>:call <SID>NetrwLeftmouse(0)<cr> - nmap <buffer> <leftdrag> <Plug>NetrwLeftdrag - nno <buffer> <silent> <Plug>NetrwLeftdrag :call <SID>NetrwLeftdrag(0)<cr> - nmap <buffer> <s-leftmouse> <Plug>NetrwSLeftmouse - nno <buffer> <silent> <Plug>NetrwSLeftmouse <leftmouse>:call <SID>NetrwSLeftmouse(0)<cr> - nmap <buffer> <s-leftdrag> <Plug>NetrwSLeftdrag - nno <buffer> <silent> <Plug>NetrwSLeftdrag <leftmouse>:call <SID>NetrwSLeftdrag(0)<cr> - nmap <middlemouse> <Plug>NetrwMiddlemouse - nno <buffer> <silent> <middlemouse> <Plug>NetrwMiddlemouse <leftmouse>:call <SID>NetrwPrevWinOpen(0)<cr> - nmap <buffer> <2-leftmouse> <Plug>Netrw2Leftmouse - nmap <buffer> <silent> <Plug>Netrw2Leftmouse - - imap <buffer> <leftmouse> <Plug>ILeftmouse - ino <buffer> <silent> <Plug>ILeftmouse <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(0)<cr> - imap <buffer> <middlemouse> <Plug>IMiddlemouse - ino <buffer> <silent> <Plug>IMiddlemouse <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(0)<cr> - imap <buffer> <s-leftmouse> <Plug>ISLeftmouse - ino <buffer> <silent> <Plug>ISLeftmouse <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr> - exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' - exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' - exe 'inoremap <buffer> <silent> <rightmouse> <c-o><leftmouse><c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' - endif - exe 'nnoremap <buffer> <silent> <del> :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' - exe 'nnoremap <buffer> <silent> d :call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>' - exe 'nnoremap <buffer> <silent> D :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' - exe 'nnoremap <buffer> <silent> R :call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' - exe 'vnoremap <buffer> <silent> <del> :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' - exe 'vnoremap <buffer> <silent> D :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' - exe 'vnoremap <buffer> <silent> R :call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' - exe 'inoremap <buffer> <silent> <del> <c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' - exe 'inoremap <buffer> <silent> d <c-o>:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>' - exe 'inoremap <buffer> <silent> D <c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' - exe 'inoremap <buffer> <silent> R <c-o>:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' - nnoremap <buffer> <F1> :he netrw-quickhelp<cr> - inoremap <buffer> <F1> <c-o>:he netrw-quickhelp<cr> - endif - - keepj call s:SetRexDir(a:islocal,b:netrw_curdir) - -" call Dret("s:NetrwMaps") -endfun - -" --------------------------------------------------------------------- " s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2 fun! s:ExplorePatHls(pattern) " call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)") @@ -3439,11 +3206,11 @@ fun! s:NetrwBookHistHandler(chg,curdir) " call Decho("changedir u#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">") if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir") setl ma noro -" call Decho("(NetrwBookHistHandler) setl ma noro") +" call Decho("setl ma noro") sil! keepj %d setl nomod -" call Decho("(NetrwBookHistHandler) setl nomod") -" call Decho("(NetrwBookHistHandler) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("setl nomod") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") endif " call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})) exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}) @@ -3464,11 +3231,11 @@ fun! s:NetrwBookHistHandler(chg,curdir) if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") " call Decho("changedir U#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">") if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir") -" call Decho("(NetrwBookHistHandler) setl ma noro") +" call Decho("setl ma noro") setl ma noro sil! keepj %d " call Decho("removed all lines from buffer (%d)") -" call Decho("(NetrwBookHistHandler) setl nomod") +" call Decho("setl nomod") setl nomod " call Decho("(set nomod) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") endif @@ -3606,8 +3373,9 @@ endfun fun! s:NetrwBrowse(islocal,dirname) if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif " call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%")."> win#".winnr()) -" call Decho("(NetrwBrowse) tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) +" call Decho("tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) " call Dredir("ls!") + " s:NetrwBrowse: initialize history {{{3 if !exists("s:netrw_initbookhist") keepj call s:NetrwBookHistRead() @@ -3622,8 +3390,8 @@ fun! s:NetrwBrowse(islocal,dirname) if exists("s:netrw_skipbrowse") unlet s:netrw_skipbrowse -" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") -" call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse) +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." filename<".expand("%")."> win#".winnr()." ft<".&ft.">") +" call Dret("s:NetrwBrowse : s:netrw_skipbrowse existed") return endif @@ -3644,27 +3412,27 @@ fun! s:NetrwBrowse(islocal,dirname) " s:NetrwBrowse: re-instate any marked files {{{3 if exists("s:netrwmarkfilelist_{bufnr('%')}") -" call Decho("(NetrwBrowse) clearing marked files") +" call Decho("clearing marked files") exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/" endif if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep " s:NetrwBrowse: set up "safe" options for local directory/file {{{3 -" call Decho("(NetrwBrowse) handle w:netrw_acdkeep:") -" call Decho("(NetrwBrowse) keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")") - exe 'keepj lcd '.fnameescape(dirname) +" call Decho("handle w:netrw_acdkeep:") +" call Decho("keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")") + call s:NetrwLcd(dirname) call s:NetrwSafeOptions() -" call Decho("(NetrwBrowse) getcwd<".getcwd().">") +" call Decho("getcwd<".getcwd().">") elseif !a:islocal && dirname !~ '[\/]$' && dirname !~ '^"' " s:NetrwBrowse: looks like a remote regular file, attempt transfer {{{3 -" call Decho("(NetrwBrowse) attempt transfer as regular file<".dirname.">") +" call Decho("attempt transfer as regular file<".dirname.">") " remove any filetype indicator from end of dirname, except for the " "this is a directory" indicator (/). " There shouldn't be one of those here, anyway. let path= substitute(dirname,'[*=@|]\r\=$','','e') -" call Decho("(NetrwBrowse) new path<".path.">") +" call Decho("new path<".path.">") call s:RemotePathAnalysis(dirname) " s:NetrwBrowse: remote-read the requested file into current buffer {{{3 @@ -3672,24 +3440,33 @@ fun! s:NetrwBrowse(islocal,dirname) call s:NetrwEnew(dirname) call s:NetrwSafeOptions() setl ma noro -" call Decho("(NetrwBrowse) setl ma noro") +" call Decho("setl ma noro") let b:netrw_curdir = dirname let url = s:method."://".s:user.s:machine.(s:port ? ":".s:port : "")."/".s:path -" call Decho("(NetrwBrowse) exe sil! keepalt file ".fnameescape(url)." (bt=".&bt.")") +" call Decho("exe sil! keepalt file ".fnameescape(url)." (bt=".&bt.")") exe "sil! keepj keepalt file ".fnameescape(url) exe "sil! keepj keepalt doau BufReadPre ".fnameescape(s:fname) sil call netrw#NetRead(2,url) - if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz' && s:path !~ '.tar.xz' && s:path !~ '.txz' - " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error + " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error +" call Decho("url<".url.">") +" call Decho("s:path<".s:path.">") +" call Decho("s:fname<".s:fname.">") + if s:path =~ '.bz2' + exe "sil keepj keepalt doau BufReadPost ".fnameescape(substitute(s:fname,'\.bz2$','','')) + elseif s:path =~ '.gz' + exe "sil keepj keepalt doau BufReadPost ".fnameescape(substitute(s:fname,'\.gz$','','')) + elseif s:path =~ '.gz' + exe "sil keepj keepalt doau BufReadPost ".fnameescape(substitute(s:fname,'\.txz$','','')) + else exe "sil keepj keepalt doau BufReadPost ".fnameescape(s:fname) endif " s:NetrwBrowse: save certain window-oriented variables into buffer-oriented variables {{{3 call s:SetBufWinVars() call s:NetrwOptionRestore("w:") -" call Decho("(NetrwBrowse) setl ma nomod") +" call Decho("setl ma nomod") setl ma nomod -" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("s:NetrwBrowse : file<".s:fname.">") return @@ -3710,24 +3487,24 @@ fun! s:NetrwBrowse(islocal,dirname) let reusing= s:NetrwGetBuffer(a:islocal,dirname) " maintain markfile highlighting if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != "" -" call Decho("(NetrwBrowse) bufnr(%)=".bufnr('%')) -" call Decho("(NetrwBrowse) exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/") +" call Decho("bufnr(%)=".bufnr('%')) +" call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/") exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/" else -" call Decho("(NetrwBrowse) 2match none") +" call Decho("2match none") 2match none endif if reusing && line("$") > 1 call s:NetrwOptionRestore("w:") -" call Decho("(NetrwBrowse) setl noma nomod nowrap") +" call Decho("setl noma nomod nowrap") setl noma nomod nowrap -" call Decho("(NetrwBrowse) (set noma nomod nowrap) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("(set noma nomod nowrap) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("s:NetrwBrowse : re-using buffer") return endif " set b:netrw_curdir to the new directory name {{{3 -" call Decho("(NetrwBrowse) set b:netrw_curdir to the new directory name<".dirname."> (buf#".bufnr("%").")") +" call Decho("set b:netrw_curdir to the new directory name<".dirname."> (buf#".bufnr("%").")") let b:netrw_curdir= dirname if b:netrw_curdir =~ '[/\\]$' let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e') @@ -3748,39 +3525,23 @@ fun! s:NetrwBrowse(islocal,dirname) if !a:islocal && b:netrw_curdir !~ '/$' let b:netrw_curdir= b:netrw_curdir.'/' endif -" call Decho("(NetrwBrowse) b:netrw_curdir<".b:netrw_curdir.">") +" call Decho("b:netrw_curdir<".b:netrw_curdir.">") " ------------ " (local only) {{{3 " ------------ if a:islocal -" call Decho("(NetrwBrowse) local only:") +" call Decho("local only:") " Set up ShellCmdPost handling. Append current buffer to browselist call s:LocalFastBrowser() " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3 if !g:netrw_keepdir -" call Decho("(NetrwBrowse) handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) -" call Decho("(NetrwBrowse) l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist")) +" call Decho("handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) +" call Decho("l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist")) if !exists("&l:acd") || !&l:acd -" call Decho('(NetrwBrowse) exe keepj lcd '.fnameescape(b:netrw_curdir)) - try - exe 'keepj lcd '.fnameescape(b:netrw_curdir) - catch /^Vim\%((\a\+)\)\=:E472/ - call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",61) - if exists("w:netrw_prvdir") - let b:netrw_curdir= w:netrw_prvdir - else - call s:NetrwOptionRestore("w:") -" call Decho("(NetrwBrowse) setl noma nomod nowrap") - setl noma nomod nowrap -" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") - let b:netrw_curdir= dirname -" call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">") - return - endif - endtry + call s:NetrwLcd(b:netrw_curdir) endif endif @@ -3788,23 +3549,23 @@ fun! s:NetrwBrowse(islocal,dirname) " remote handling: {{{3 " -------------------------------- else -" call Decho("(NetrwBrowse) remote only:") +" call Decho("remote only:") " analyze dirname and g:netrw_list_cmd {{{3 -" call Decho("(NetrwBrowse) b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">") +" call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">") if dirname =~ "^NetrwTreeListing\>" let dirname= b:netrw_curdir -" call Decho("(NetrwBrowse) (dirname was <NetrwTreeListing>) dirname<".dirname.">") +" call Decho("(dirname was <NetrwTreeListing>) dirname<".dirname.">") elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir") let dirname= substitute(b:netrw_curdir,'\\','/','g') if dirname !~ '/$' let dirname= dirname.'/' endif let b:netrw_curdir = dirname -" call Decho("(NetrwBrowse) (liststyle is TREELIST) dirname<".dirname.">") +" call Decho("(liststyle is TREELIST) dirname<".dirname.">") else let dirname = substitute(dirname,'\\','/','g') -" call Decho("(NetrwBrowse) (normal) dirname<".dirname.">") +" call Decho("(normal) dirname<".dirname.">") endif let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$' @@ -3813,37 +3574,34 @@ fun! s:NetrwBrowse(islocal,dirname) keepj call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20) endif keepj call s:NetrwOptionRestore("w:") -" call Decho("(NetrwBrowse) setl noma nomod nowrap") +" call Decho("setl noma nomod nowrap") setl noma nomod nowrap -" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">") return endif let b:netrw_curdir= dirname -" call Decho("(NetrwBrowse) b:netrw_curdir<".b:netrw_curdir."> (remote)") +" call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)") endif " (additional remote handling) " ----------------------- " Directory Listing: {{{3 " ----------------------- keepj call s:NetrwMaps(a:islocal) + keepj call s:NetrwCommands(a:islocal) keepj call s:PerformListing(a:islocal) if v:version >= 700 && has("balloon_eval") && &beval == 0 && &l:bexpr == "" && !exists("g:netrw_nobeval") - let &l:bexpr= "netrw#NetrwBalloonHelp()" -" call Decho("(NetrwBrowse) set up balloon help: l:bexpr=".&l:bexpr) - set beval + let &l:bexpr= "netrw#BalloonHelp()" +" call Decho("set up balloon help: l:bexpr=".&l:bexpr) + setl beval endif call s:NetrwOptionRestore("w:") - " The s:LocalBrowseShellCmdRefresh() function is called by an autocmd + " The s:LocalBrowseRefresh() function is called by an autocmd " installed by s:LocalFastBrowser() when g:netrw_fastbrowse <= 1 (ie. slow, medium speed). - " However, s:NetrwBrowse() causes the ShellCmdPost event itself to fire once; setting - " the variable below avoids that second refresh of the screen. The s:LocalBrowseShellCmdRefresh() - " function gets called due to that autocmd; it notices that the following variable is set - " and skips the refresh and sets s:locbrowseshellcmd to zero. Oct 13, 2008 - let s:locbrowseshellcmd= 1 + " However, s:NetrwBrowse() causes the FocusGained event to fire the firstt time. -" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("s:NetrwBrowse : did PerformListing ft<".&ft.">") return endfun @@ -3860,7 +3618,7 @@ fun! s:NetrwFileInfo(islocal,fname) echo system("/bin/ls -lsad ".shellescape("..")) " call Decho("#1: echo system(/bin/ls -lsad ".shellescape(..).")") - elseif getline(".") !~ '^'.s:treedepthstring + elseif w:netrw_liststyle == s:TREELIST && getline(".") !~ '^'.s:treedepthstring echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir)) " call Decho("#2: echo system(/bin/ls -lsad ".shellescape(b:netrw_curdir).")") @@ -3890,7 +3648,7 @@ fun! s:NetrwFileInfo(islocal,fname) let t = getftime(fname) let sz = getfsize(fname) echo a:fname.": ".sz." ".strftime(g:netrw_timefmt,getftime(fname)) -" call Decho(fname.": ".sz." ".strftime(g:netrw_timefmt,getftime(fname))) +" call Decho("fname.": ".sz." ".strftime(g:netrw_timefmt,getftime(fname))) endif else echo "sorry, \"qf\" not supported yet for remote files" @@ -3905,42 +3663,42 @@ endfun " 1=re-used buffer fun! s:NetrwGetBuffer(islocal,dirname) " call Dfunc("s:NetrwGetBuffer(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".g:netrw_liststyle) -" call Decho("(NetrwGetBuffer) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) let dirname= a:dirname " re-use buffer if possible {{{3 -" call Decho("(NetrwGetBuffer) --re-use a buffer if possible--") +" call Decho("--re-use a buffer if possible--") if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST " find NetrwTreeList buffer if there is one -" call Decho("(NetrwGetBuffer) case liststyle=treelist: find NetrwTreeList buffer if there is one") +" call Decho("case liststyle=treelist: find NetrwTreeList buffer if there is one") if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0 -" call Decho("(NetrwGetBuffer) re-using w:netrw_treebufnr=".w:netrw_treebufnr) +" call Decho(" re-using w:netrw_treebufnr=".w:netrw_treebufnr) let eikeep= &ei - set ei=all + setl ei=all exe "sil! keepalt b ".w:netrw_treebufnr let &ei= eikeep setl ma sil! keepj %d -" call Decho("(NetrwGetBuffer) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " call Dret("s:NetrwGetBuffer 0<buffer cleared> : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>") return 0 endif let bufnum= -1 -" call Decho("(NetrwGetBuffer) liststyle=TREE but w:netrw_treebufnr doesn't exist") +" call Decho(" liststyle=TREE but w:netrw_treebufnr doesn't exist") else " find buffer number of buffer named precisely the same as dirname {{{3 -" call Decho("(NetrwGetBuffer) case listtyle not treelist: find buffer numnber of buffer named precisely the same as dirname--") +" call Decho("case listtyle not treelist: find buffer numnber of buffer named precisely the same as dirname--") " call Dredir("(NetrwGetBuffer) ls!","ls!") " get dirname and associated buffer number let bufnum = bufnr(escape(dirname,'\')) -" call Decho("(NetrwGetBuffer) find buffer<".dirname.">'s number ") -" call Decho("(NetrwGetBuffer) bufnr(dirname<".escape(dirname,'\').">)=".bufnum) +" call Decho(" find buffer<".dirname.">'s number ") +" call Decho(" bufnr(dirname<".escape(dirname,'\').">)=".bufnum) if bufnum < 0 && dirname !~ '/$' " try appending a trailing / -" call Decho("(NetrwGetBuffer) try appending a trailing / to dirname<".dirname.">") +" call Decho(" try appending a trailing / to dirname<".dirname.">") let bufnum= bufnr(escape(dirname.'/','\')) if bufnum > 0 let dirname= dirname.'/' @@ -3949,30 +3707,30 @@ fun! s:NetrwGetBuffer(islocal,dirname) if bufnum < 0 && dirname =~ '/$' " try removing a trailing / -" call Decho("(NetrwGetBuffer) try removing a trailing / from dirname<".dirname.">") +" call Decho(" try removing a trailing / from dirname<".dirname.">") let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\')) if bufnum > 0 let dirname= substitute(dirname,'/$','','') endif endif -" call Decho("(NetrwGetBuffer) findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)") +" call Decho(" findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)") " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/ and abc/ matches) if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.' " handle approximate matches -" call Decho("(NetrwGetBuffer) handling approx match: bufnum#".bufnum.">0 AND bufname<".bufname(bufnum).">!=dirname<".dirname."> AND bufname(".bufnum.")!='.'") +" call Decho(" handling approx match: bufnum#".bufnum.">0 AND bufname<".bufname(bufnum).">!=dirname<".dirname."> AND bufname(".bufnum.")!='.'") let ibuf = 1 let buflast = bufnr("$") -" call Decho("(NetrwGetBuffer) findbuf2: buflast=bufnr($)=".buflast) +" call Decho(" findbuf2: buflast=bufnr($)=".buflast) while ibuf <= buflast let bname= substitute(bufname(ibuf),'\\','/','g') let bname= substitute(bname,'.\zs/$','','') -" call Decho("(NetrwGetBuffer) findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bname=bufname(".ibuf.")<".bname.">") +" call Decho(" findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bname=bufname(".ibuf.")<".bname.">") if bname != '' && dirname =~ '/'.bname.'/\=$' && dirname !~ '^/' " bname is not empty " dirname ends with bname, " dirname doesn't start with /, so its not a absolute path -" call Decho("(NetrwGetBuffer) findbuf3a: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/') +" call Decho(" findbuf3a: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/') break endif if bname =~ '^'.dirname.'/\=$' @@ -3995,83 +3753,83 @@ fun! s:NetrwGetBuffer(islocal,dirname) else let bufnum= ibuf endif -" call Decho("(NetrwGetBuffer) findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")") +" call Decho(" findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")") endif endif " get enew buffer and name it -or- re-use buffer {{{3 -" call Decho("(NetrwGetBuffer) get enew buffer and name it OR re-use buffer") +" call Decho(" get enew buffer and name it OR re-use buffer") sil! keepj keepalt mark ' if bufnum < 0 || !bufexists(bufnum) -" call Decho("(NetrwGetBuffer) --get enew buffer and name it (bufnum#".bufnum."<0 OR bufexists(".bufnum.")=".bufexists(bufnum)."==0)") +" call Decho("--get enew buffer and name it (bufnum#".bufnum."<0 OR bufexists(".bufnum.")=".bufexists(bufnum)."==0)") call s:NetrwEnew(dirname) -" call Decho("(NetrwGetBuffer) got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)") +" call Decho(" got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)") " name the buffer if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST " Got enew buffer; transform into a NetrwTreeListing -" call Decho("(NetrwGetBuffer) --transform enew buffer#".bufnr("%")." into a NetrwTreeListing --") +" call Decho("--transform enew buffer#".bufnr("%")." into a NetrwTreeListing --") if !exists("s:netrw_treelistnum") let s:netrw_treelistnum= 1 else let s:netrw_treelistnum= s:netrw_treelistnum + 1 endif let w:netrw_treebufnr= bufnr("%") -" call Decho("(NetrwGetBuffer) exe sil! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum)) +" call Decho(" exe sil! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum)) exe 'sil! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum) - set bt=nofile noswf + setl bt=nofile noswf nnoremap <silent> <buffer> [ :sil call <SID>TreeListMove('[')<cr> nnoremap <silent> <buffer> ] :sil call <SID>TreeListMove(']')<cr> nnoremap <silent> <buffer> [[ :sil call <SID>TreeListMove('[')<cr> nnoremap <silent> <buffer> ]] :sil call <SID>TreeListMove(']')<cr> -" call Decho("(NetrwGetBuffer) tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr) +" call Decho(" tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr) else " let v:errmsg= "" " Decho let escdirname= fnameescape(dirname) -" call Decho("(NetrwGetBuffer) errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">") +" call Decho(" errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">") " call Decho(' exe sil! keepalt file '.escdirname) " let v:errmsg= "" " Decho exe 'sil! keepalt file '.escdirname -" call Decho("(NetrwGetBuffer) errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">") +" call Decho(" errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">") endif -" call Decho("(NetrwGetBuffer) named enew buffer#".bufnr("%")."<".bufname("%").">") +" call Decho(" named enew buffer#".bufnr("%")."<".bufname("%").">") else " Re-use the buffer -" call Decho("(NetrwGetBuffer) --re-use buffer#".bufnum." (bufnum#".bufnum.">=0 AND bufexists(".bufnum.")=".bufexists(bufnum)."!=0)") +" call Decho("--re-use buffer#".bufnum." (bufnum#".bufnum.">=0 AND bufexists(".bufnum.")=".bufexists(bufnum)."!=0)") let eikeep= &ei - set ei=all + setl ei=all if getline(2) =~ '^" Netrw Directory Listing' -" call Decho("(NetrwGetBuffer) getline(2)<".getline(2).'> matches "Netrw Directory Listing" : using keepalt b '.bufnum) +" call Decho(" getline(2)<".getline(2).'> matches "Netrw Directory Listing" : using keepalt b '.bufnum) exe "sil! keepalt b ".bufnum else -" call Decho("(NetrwGetBuffer) getline(2)<".getline(2).'> does not match "Netrw Directory Listing" : using b '.bufnum) +" call Decho(" getline(2)<".getline(2).'> does not match "Netrw Directory Listing" : using b '.bufnum) exe "sil! keepalt b ".bufnum endif if bufname("%") == '.' -" call Decho("(NetrwGetBuffer) exe sil! keepalt file ".fnameescape(getcwd())) +" call Decho("exe sil! keepalt file ".fnameescape(getcwd())) exe "sil! keepalt file ".fnameescape(getcwd()) endif let &ei= eikeep if line("$") <= 1 keepj call s:NetrwListSettings(a:islocal) -" call Decho("(NetrwGetBuffer) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " call Dret("s:NetrwGetBuffer 0<buffer empty> : re-using buffer#".bufnr("%").", but its empty, so refresh it") return 0 elseif g:netrw_fastbrowse == 0 || (a:islocal && g:netrw_fastbrowse == 1) keepj call s:NetrwListSettings(a:islocal) sil keepj %d -" call Decho("(NetrwGetBuffer) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " call Dret("s:NetrwGetBuffer 0<cleared buffer> : re-using buffer#".bufnr("%").", but refreshing due to g:netrw_fastbrowse=".g:netrw_fastbrowse) return 0 elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST -" call Decho("(NetrwGetBuffer) --re-use tree listing--") -" call Decho("(NetrwGetBuffer) clear buffer<".expand("%")."> with :%d") +" call Decho("--re-use tree listing--") +" call Decho(" clear buffer<".expand("%")."> with :%d") sil keepj %d keepj call s:NetrwListSettings(a:islocal) -" call Decho("(NetrwGetBuffer) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " call Dret("s:NetrwGetBuffer 0<cleared buffer> : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh") return 0 else -" call Decho("(NetrwGetBuffer) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " call Dret("s:NetrwGetBuffer 1<buffer not cleared> : buf#".bufnr("%")) return 1 endif @@ -4082,18 +3840,18 @@ fun! s:NetrwGetBuffer(islocal,dirname) " slow 0 D D Deleting a buffer implies it will not be re-used (slow) " med 1 D H " fast 2 H H -" call Decho("(NetrwGetBuffer) --do netrw settings: make this buffer#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--") +" call Decho("--do netrw settings: make this buffer#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--") let fname= expand("%") keepj call s:NetrwListSettings(a:islocal) -" call Decho("(NetrwGetBuffer) exe sil! keepalt file ".fnameescape(fname)) +" call Decho("exe sil! keepalt file ".fnameescape(fname)) exe "sil! keepj keepalt file ".fnameescape(fname) " delete all lines from buffer {{{3 -" call Decho("(NetrwGetBuffer) --delete all lines from buffer--") -" call Decho("(NetrwGetBuffer) clear buffer<".expand("%")."> with :%d") +" call Decho("--delete all lines from buffer--") +" call Decho(" clear buffer<".expand("%")."> with :%d") sil! keepalt keepj %d -" call Decho("(NetrwGetBuffer) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " call Dret("s:NetrwGetBuffer 0<cleared buffer> : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")) return 0 endfun @@ -4225,7 +3983,7 @@ endfun " s:NetrwListSettings: make standard settings for a netrw listing {{{2 fun! s:NetrwListSettings(islocal) " call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")") -" call Decho("(s:NetrwListSettings) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) let fname= bufname("%") " call Decho("(NetrwListSettings) setl bt=nofile nobl ma nonu nowrap noro") setl bt=nofile nobl ma nonu nowrap noro @@ -4243,7 +4001,7 @@ fun! s:NetrwListSettings(islocal) else setl bh=delete endif -" call Decho("(s:NetrwListSettings) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " call Dret("s:NetrwListSettings") endfun @@ -4293,15 +4051,15 @@ fun! s:NetrwListStyle(islocal) " call Decho("clear buffer<".expand("%")."> with :%d") sil! keepj %d " following prevents tree listing buffer from being marked "modified" -" call Decho("(NetrwListStyle) setl nomod") +" call Decho("setl nomod") setl nomod -" call Decho("(NetrwListStyle) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " refresh the listing -" call Decho("(NetrwListStyle) refresh the listing") - let svpos= netrw#NetrwSavePosn() +" call Decho("refresh the listing") + let svpos= netrw#SavePosn() keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) keepj call s:NetrwCursor() " keep cursor on the filename @@ -4326,7 +4084,7 @@ fun! s:NetrwBannerCtrl(islocal) let g:netrw_banner= !g:netrw_banner " refresh the listing - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) " keep cursor on the filename @@ -4412,83 +4170,108 @@ endfun " NetrwBrowseChgDir() edits the file. fun! s:NetrwBrowseChgDir(islocal,newdir,...) " call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">") +" call Decho("win#".winnr()) let ykeep= @@ if !exists("b:netrw_curdir") " Don't try to change-directory: this can happen, for example, when netrw#ErrorMsg has been called " and the current window is the NetrwMessage window. let @@= ykeep -" call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!") -" call Decho("(NetrwBrowseChgDir) getcwd<".getcwd().">") +" call Decho("b:netrw_curdir doesn't exist!") +" call Decho("getcwd<".getcwd().">") " call Dredir("ls!") " call Dret("s:NetrwBrowseChgDir") return endif " NetrwBrowseChgDir: save options and initialize {{{3 -" call Decho("(NetrwBrowseChgDir) saving options") +" call Decho("saving options") keepj call s:NetrwOptionSave("s:") keepj call s:NetrwSafeOptions() - let nbcd_curpos = netrw#NetrwSavePosn() + let nbcd_curpos = netrw#SavePosn() let s:nbcd_curpos_{bufnr('%')} = nbcd_curpos -" call Decho("(NetrwBrowseChgDir) setting s:nbcd_curpos_".bufnr('%')." to SavePosn") +" call Decho("setting s:nbcd_curpos_".bufnr('%')." to SavePosn") if (has("win32") || has("win95") || has("win64") || has("win16")) - let dirname = substitute(b:netrw_curdir,'\\','/','ge') + let dirname = substitute(b:netrw_curdir,'\\','/','ge') else - let dirname= b:netrw_curdir + let dirname = b:netrw_curdir endif let newdir = a:newdir let dolockout = 0 +" call Decho("dirname<".dirname.">") + + " ignore <cr>s when done in the banner + if g:netrw_banner +" call Decho("w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'n/a')." line(.)#".line('.')." line($)#".line("#")) + if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt && line("$") >= w:netrw_bannercnt + if getline(".") =~ 'Quick Help' +" call Decho("#1: quickhelp=".g:netrw_quickhelp." ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") + let g:netrw_quickhelp= (g:netrw_quickhelp + 1)%len(s:QuickHelp) +" call Decho("#2: quickhelp=".g:netrw_quickhelp." ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") + setl noro ma nowrap + keepj call setline(line('.'),'" Quick Help: <F1>:help '.s:QuickHelp[g:netrw_quickhelp]) + setl noma nomod nowrap + keepj call netrw#RestorePosn(nbcd_curpos) + keepj call s:NetrwOptionRestore("s:") +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") + endif + endif +" else " Decho +" call Decho("(s:NetrwBrowseChgdir) g:netrw_banner=".g:netrw_banner." (no banner)") + endif " set up o/s-dependent directory recognition pattern -" call Decho("(NetrwBrowseChgDir) set up o/s-dependent directory recognition pattern") +" call Decho("set up o/s-dependent directory recognition pattern") if has("amiga") let dirpat= '[\/:]$' else let dirpat= '[\/]$' endif -" call Decho("(NetrwBrowseChgDir) dirname<".dirname."> dirpat<".dirpat.">") +" call Decho("dirname<".dirname."> dirpat<".dirpat.">") if dirname !~ dirpat " apparently vim is "recognizing" that it is in a directory and " is removing the trailing "/". Bad idea, so let's put it back. let dirname= dirname.'/' -" call Decho("(NetrwBrowseChgDir) adjusting dirname<".dirname.">") +" call Decho("adjusting dirname<".dirname.">") endif if newdir !~ dirpat " ------------------------------ " NetrwBrowseChgDir: edit a file {{{3 " ------------------------------ -" call Decho('(NetrwBrowseChgDir:edit-a-file) case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">") +" call Decho('edit-a-file: case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">") " save position for benefit of Rexplore - let s:rexposn_{bufnr("%")}= netrw#NetrwSavePosn() + let s:rexposn_{bufnr("%")}= netrw#SavePosn() + +" call Decho("edit-a-file: setting s:rexposn_".bufnr("%")." to SavePosn") +" call Decho("edit-a-file: win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> ft=".&ft) +" call Decho("edit-a-file: w:netrw_liststyle=".(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a')." w:netrw_treedict:".(exists("w:netrw_treedict")? "exists" : 'n/a')." newdir<".newdir.">") -" call Decho("(NetrwBrowseChgDir:edit-a-file) setting s:rexposn_".bufnr("%")." to SavePosn") -" call Decho("(NetrwBrowseChgDir:edit-a-file) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> ft=".&ft) if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)' -" call Decho("(NetrwBrowseChgDir:edit-a-file) handle tree listing: w:netrw_treedict<".(exists("w:netrw_treedict")? string(w:netrw_treedict) : 'n/a').">") +" call Decho("edit-a-file: handle tree listing: w:netrw_treedict<".(exists("w:netrw_treedict")? string(w:netrw_treedict) : 'n/a').">") +" call Decho("edit-a-file: newdir<".newdir.">") let dirname= s:NetrwTreeDir() if dirname =~ '/$' let dirname= dirname.newdir else let dirname= dirname."/".newdir endif -" call Decho("(NetrwBrowseChgDir:edit-a-file) dirname<".dirname.">") -" call Decho("(NetrwBrowseChgDir:edit-a-file) tree listing") +" call Decho("edit-a-file: dirname<".dirname.">") +" call Decho("edit-a-file: tree listing") elseif newdir =~ '^\(/\|\a:\)' let dirname= newdir else let dirname= s:ComposePath(dirname,newdir) endif -" call Decho("(NetrwBrowseChgDir:edit-a-file) handling a file: dirname<".dirname."> (a:0=".a:0.")") +" call Decho("edit-a-file: handling a file: dirname<".dirname."> (a:0=".a:0.")") " this lets NetrwBrowseX avoid the edit if a:0 < 1 -" call Decho("(NetrwBrowseChgDir:edit-a-file) set up windows for editing<".fnameescape(dirname)."> didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist")) +" call Decho("edit-a-file: set up windows for editing<".fnameescape(dirname)."> didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist")) keepj call s:NetrwOptionRestore("s:") if !exists("s:didsplit") -" call Decho("(NetrwBrowseChgDir:edit-a-file) s:didsplit does not exist; g:netrw_browse_split=".g:netrw_browse_split." win#".winnr()) +" call Decho("edit-a-file: s:didsplit does not exist; g:netrw_browse_split=".g:netrw_browse_split." win#".winnr()) if g:netrw_browse_split == 1 " horizontally splitting the window first keepalt new @@ -4513,7 +4296,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) endif else " handling a file, didn't split, so remove menu -" call Decho("(NetrwBrowseChgDir:edit-a-file) handling a file+didn't split, so remove menu") +" call Decho("edit-a-file: handling a file+didn't split, so remove menu") call s:NetrwMenu(0) " optional change to window if g:netrw_chgwin >= 1 @@ -4526,7 +4309,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will " no keepalt to support :e # to return to a directory listing if a:islocal -" call Decho("(NetrwBrowseChgDir:edit-a-file) edit local file: exe e! ".fnameescape(dirname)) +" call Decho("edit-a-file: edit local file: exe e! ".fnameescape(dirname)) " some like c-^ to return to the last edited file " others like c-^ to return to the netrw buffer if exists("g:netrw_altfile") && g:netrw_altfile @@ -4536,7 +4319,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) endif call s:NetrwCursor() else -" call Decho("(NetrwBrowseChgDir:edit-a-file) remote file: NetrwBrowse will edit it") +" call Decho("edit-a-file: remote file: NetrwBrowse will edit it") endif let dolockout= 1 @@ -4545,12 +4328,12 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) " or as a list of function references. It will ignore anything that's not " a function reference. See :help Funcref for information about function references. if exists("g:Netrw_funcref") -" call Decho("(NetrwBrowseChgDir:edit-a-file) handle optional Funcrefs") +" call Decho("edit-a-file: handle optional Funcrefs") if type(g:Netrw_funcref) == 2 -" call Decho("(NetrwBrowseChgDir:edit-a-file) handling a g:Netrw_funcref") +" call Decho("edit-a-file: handling a g:Netrw_funcref") keepj call g:Netrw_funcref() elseif type(g:Netrw_funcref) == 3 -" call Decho("(NetrwBrowseChgDir:edit-a-file) handling a list of g:Netrw_funcrefs") +" call Decho("edit-a-file: handling a list of g:Netrw_funcrefs") for Fncref in g:Netrw_funcref if type(FncRef) == 2 keepj call FncRef() @@ -4564,7 +4347,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) " ---------------------------------------------------- " NetrwBrowseChgDir: just go to the new directory spec {{{3 " ---------------------------------------------------- -" call Decho('(NetrwBrowseChgDir:goto-newdir) case "just go to new directory spec": newdir<'.newdir.'>') +" call Decho('goto-newdir: case "just go to new directory spec": newdir<'.newdir.'>') let dirname = newdir keepj call s:SetRexDir(a:islocal,dirname) keepj call s:NetrwOptionRestore("s:") @@ -4573,33 +4356,33 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) " --------------------------------------------- " NetrwBrowseChgDir: refresh the directory list {{{3 " --------------------------------------------- -" call Decho('(NetrwBrowseChgDir:refresh-dirlist) case "refresh directory listing": newdir == "./"') +" call Decho('refresh-dirlist: case "refresh directory listing": newdir == "./"') keepj call s:SetRexDir(a:islocal,dirname) elseif newdir == '../' " -------------------------------------- " NetrwBrowseChgDir: go up one directory {{{3 " -------------------------------------- -" call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../"') +" call Decho('go-up: case "go up one directory": newdir == "../"') if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") " force a refresh -" call Decho("(NetrwBrowseChgDir:go-up) clear buffer<".expand("%")."> with :%d") -" call Decho("(NetrwBrowseChgDir:go-up) setl noro ma") +" call Decho("go-up: clear buffer<".expand("%")."> with :%d") +" call Decho("go-up: setl noro ma") setl noro ma keepj %d endif if has("amiga") " amiga -" call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../" and amiga') +" call Decho('go-up: case "go up one directory": newdir == "../" and amiga') if a:islocal let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','') let dirname= substitute(dirname,'/$','','') else let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','') endif -" call Decho("(NetrwBrowseChgDir:go-up) amiga: dirname<".dirname."> (go up one dir)") +" call Decho("go-up: amiga: dirname<".dirname."> (go up one dir)") elseif !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16")) " windows @@ -4614,11 +4397,11 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) if dirname =~ '^\a:$' let dirname= dirname.'/' endif -" call Decho("(NetrwBrowseChgDir:go-up) windows: dirname<".dirname."> (go up one dir)") +" call Decho("go-up: windows: dirname<".dirname."> (go up one dir)") else " unix or cygwin -" call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../" and unix or cygwin') +" call Decho('go-up: case "go up one directory": newdir == "../" and unix or cygwin') if a:islocal let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','') if dirname == "" @@ -4627,7 +4410,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) else let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','') endif -" call Decho("(NetrwBrowseChgDir:go-up) unix: dirname<".dirname."> (go up one dir)") +" call Decho("go-up: unix: dirname<".dirname."> (go up one dir)") endif keepj call s:SetRexDir(a:islocal,dirname) @@ -4635,35 +4418,35 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) " -------------------------------------- " NetrwBrowseChgDir: Handle Tree Listing {{{3 " -------------------------------------- -" call Decho('(NetrwBrowseChgDir:tree-list) case liststyle is TREELIST and w:netrw_treedict exists') +" call Decho('tree-list: case liststyle is TREELIST and w:netrw_treedict exists') " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh) -" call Decho("(NetrwBrowseChgDir) (treelist) setl noro ma") +" call Decho("tree-list: setl noro ma") setl noro ma if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")) -" call Decho("(NetrwBrowseChgDir) clear buffer<".expand("%")."> with :%d") +" call Decho("tree-list: clear buffer<".expand("%")."> with :%d") keepj %d endif let treedir = s:NetrwTreeDir() let s:treecurpos = nbcd_curpos let haskey= 0 -" call Decho("(NetrwBrowseChgDir:tree-list) w:netrw_treedict<".string(w:netrw_treedict).">") +" call Decho("tree-list: w:netrw_treedict<".string(w:netrw_treedict).">") " search treedict for tree dir as-is if has_key(w:netrw_treedict,treedir) -" call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : found it!') +" call Decho('tree-list: ....searched for treedir<'.treedir.'> : found it!') let haskey= 1 else -" call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : not found') +" call Decho('tree-list: ....searched for treedir<'.treedir.'> : not found') endif " search treedict for treedir with a / appended if !haskey && treedir !~ '/$' if has_key(w:netrw_treedict,treedir."/") let treedir= treedir."/" -" call Decho('(NetrwBrowseChgDir:tree-list) ....searched.for treedir<'.treedir.'> found it!') +" call Decho('tree-list: ....searched.for treedir<'.treedir.'> found it!') let haskey = 1 else -" call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'/> : not found') +" call Decho('tree-list: ....searched for treedir<'.treedir.'/> : not found') endif endif @@ -4671,24 +4454,24 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) if !haskey && treedir =~ '/$' let treedir= substitute(treedir,'/$','','') if has_key(w:netrw_treedict,treedir) -" call Decho('(NetrwBrowseChgDir:tree-list) ....searched.for treedir<'.treedir.'> found it!') +" call Decho('tree-list: ....searched.for treedir<'.treedir.'> found it!') let haskey = 1 else -" call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : not found') +" call Decho('tree-list: ....searched for treedir<'.treedir.'> : not found') endif endif if haskey " close tree listing for selected subdirectory -" call Decho("(NetrwBrowseChgDir:tree-list) closing selected subdirectory<".dirname.">") +" call Decho("tree-list: closing selected subdirectory<".dirname.">") call remove(w:netrw_treedict,treedir) -" call Decho("(NetrwBrowseChgDir) removed entry<".treedir."> from treedict") -" call Decho("(NetrwBrowseChgDir) yielding treedict<".string(w:netrw_treedict).">") +" call Decho("tree-list: removed entry<".treedir."> from treedict") +" call Decho("tree-list: yielding treedict<".string(w:netrw_treedict).">") let dirname= w:netrw_treetop else " go down one directory let dirname= substitute(treedir,'/*$','/','') -" call Decho("(NetrwBrowseChgDir:tree-list) go down one dir: treedir<".treedir.">") +" call Decho("tree-list: go down one dir: treedir<".treedir.">") endif keepj call s:SetRexDir(a:islocal,dirname) let s:treeforceredraw = 1 @@ -4698,7 +4481,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) " NetrwBrowseChgDir: Go down one directory {{{3 " ---------------------------------------- let dirname = s:ComposePath(dirname,newdir) -" call Decho("(NetrwBrowseChgDir:go-down) go down one dir: dirname<".dirname."> newdir<".newdir.">") +" call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">") keepj call s:SetRexDir(a:islocal,dirname) endif @@ -4707,17 +4490,17 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) " -------------------------------------- keepj call s:NetrwOptionRestore("s:") if dolockout -" call Decho("(NetrwBrowseChgDir:restore) filewritable(dirname<".dirname.">)=".filewritable(dirname)) +" call Decho("restore: filewritable(dirname<".dirname.">)=".filewritable(dirname)) if filewritable(dirname) -" call Decho("(NetrwBrowseChgDir:restore) doing modification lockout settings: ma nomod noro") -" call Decho("(NetrwBrowseChgDir:restore) setl ma nomod noro") +" call Decho("restore: doing modification lockout settings: ma nomod noro") +" call Decho("restore: setl ma nomod noro") setl ma nomod noro -" call Decho("(NetrwBrowseChgDir:restore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("restore: ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") else -" call Decho("(NetrwBrowseChgDir:restore) doing modification lockout settings: ma nomod ro") -" call Decho("(NetrwBrowseChgDir:restore) setl ma nomod noro") +" call Decho("restore: doing modification lockout settings: ma nomod ro") +" call Decho("restore: setl ma nomod noro") setl ma nomod ro -" call Decho("(NetrwBrowseChgDir:restore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("restore: ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") endif endif let @@= ykeep @@ -4727,6 +4510,55 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) endfun " --------------------------------------------------------------------- +" s:NetrwBrowseUpDir: implements the "-" mappings {{{2 +" for thin, long, and wide: cursor placed just after banner +" for tree, keeps cursor on current filename +fun! s:NetrwBrowseUpDir(islocal) +" call Dfunc("s:NetrwBrowseUpDir(islocal=".a:islocal.")") + norm! 0 + if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") +" call Decho("ftp + treestyle") + let curline= getline(".") + let swwline= winline() - 1 + if exists("w:netrw_treetop") + let b:netrw_curdir= w:netrw_treetop + endif + if a:islocal + call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,'../')) + else + call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,'../')) + endif + if !search('\c^'.s:treedepthstring.curline,'cw') + if !search('\c^'.curline,'cw') + sil! keepj 1 + endif + endif + exe "sil! keepj norm! z\<cr>" + while winline() < swwline + let curwinline= winline() + exe "sil! keepj norm! \<c-y>" + if curwinline == winline() + break + endif + endwhile + else +" call Decho("ftp + not treestyle") + if a:islocal + call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,'../')) + else + call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,'../')) + endif + if exists("w:netrw_bannercnt") +" call Decho("moving to line#".w:netrw_bannercnt) + exe w:netrw_bannercnt + else + 1 + endif + endif +" call Dret("s:NetrwBrowseUpDir") +endfun + +" --------------------------------------------------------------------- " s:NetrwBrowseX: (implements "x") executes a special "viewer" script or program for the {{{2 " given filename; typically this means given their extension. " 0=local, 1=remote @@ -4734,7 +4566,7 @@ fun! netrw#NetrwBrowseX(fname,remote) " call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")") let ykeep = @@ - let screenposn = netrw#NetrwSavePosn() + let screenposn = netrw#SavePosn() " special core dump handler if a:fname =~ '/core\(\.\d\+\)\=$' @@ -4752,7 +4584,7 @@ fun! netrw#NetrwBrowseX(fname,remote) endif endfor endif - call netrw#NetrwRestorePosn(screenposn) + call netrw#RestorePosn(screenposn) let @@= ykeep " call Dret("NetrwBrowseX : coredump handler invoked") return @@ -4784,7 +4616,7 @@ fun! netrw#NetrwBrowseX(fname,remote) if a:remote == 1 " create a local copy -" call Decho("(remote) a:remote=".a:remote.": create a local copy of <".a:fname.">") +" call Decho("remote: a:remote=".a:remote.": create a local copy of <".a:fname.">") setl bh=delete call netrw#NetRead(3,a:fname) " attempt to rename tempfile @@ -4800,7 +4632,7 @@ fun! netrw#NetrwBrowseX(fname,remote) let fname= s:netrw_tmpfile endif else -" call Decho("(local) a:remote=".a:remote.": handling local copy of <".a:fname.">") +" call Decho("local: a:remote=".a:remote.": handling local copy of <".a:fname.">") let fname= a:fname " special ~ handler for local if fname =~ '^\~' && expand("$HOME") != "" @@ -4938,7 +4770,7 @@ fun! netrw#NetrwBrowseX(fname,remote) exe "sil! keepj norm! \<c-o>" " redraw! endif - call netrw#NetrwRestorePosn(screenposn) + call netrw#RestorePosn(screenposn) let @@= ykeep " call Dret("NetrwBrowseX") @@ -5056,10 +4888,10 @@ endfun fun! s:NetrwHide(islocal) " call Dfunc("NetrwHide(islocal=".a:islocal.") g:netrw_hide=".g:netrw_hide) let ykeep= @@ - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() if exists("s:netrwmarkfilelist_{bufnr('%')}") -" call Decho(((g:netrw_hide == 1)? "unhide" : "hide")." files in markfilelist<".string(s:netrwmarkfilelist_{bufnr("%")}).">") +" call Decho("((g:netrw_hide == 1)? "unhide" : "hide")." files in markfilelist<".string(s:netrwmarkfilelist_{bufnr("%")}).">") " call Decho("g:netrw_list_hide<".g:netrw_list_hide.">") " hide the files in the markfile list @@ -5098,7 +4930,7 @@ fun! s:NetrwHide(islocal) endif keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) let @@= ykeep " call Dret("NetrwHide") endfun @@ -5109,7 +4941,7 @@ fun! s:NetrwHidden(islocal) " call Dfunc("s:NetrwHidden()") let ykeep= @@ " save current position - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() if g:netrw_list_hide =~ '\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+' " remove pattern from hiding list @@ -5122,7 +4954,7 @@ fun! s:NetrwHidden(islocal) " refresh screen and return to saved position keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) let @@= ykeep " call Dret("s:NetrwHidden") endfun @@ -5313,7 +5145,7 @@ fun! s:NetrwHideEdit(islocal) let ykeep= @@ " save current cursor position - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() " get new hiding list from user call inputsave() @@ -5326,7 +5158,7 @@ fun! s:NetrwHideEdit(islocal) sil keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./")) " restore cursor position - call netrw#NetrwRestorePosn(svpos) + call netrw#RestorePosn(svpos) let @@= ykeep " call Dret("NetrwHideEdit") @@ -5338,7 +5170,7 @@ fun! s:NetSortSequence(islocal) " call Dfunc("NetSortSequence(islocal=".a:islocal.")") let ykeep= @@ - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() call inputsave() let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence) call inputrestore() @@ -5346,7 +5178,7 @@ fun! s:NetSortSequence(islocal) " refresh the listing let g:netrw_sort_sequence= newsortseq keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) let @@= ykeep " call Dret("NetSortSequence") @@ -5355,7 +5187,7 @@ endfun " --------------------------------------------------------------------- " s:NetrwMakeDir: this function makes a directory (both local and remote) {{{2 fun! s:NetrwMakeDir(usrhost) -" call Dfunc("NetrwMakeDir(usrhost<".a:usrhost.">)") +" call Dfunc("s:NetrwMakeDir(usrhost<".a:usrhost.">)") let ykeep= @@ " get name of new directory from user. A bare <CR> will skip. @@ -5368,7 +5200,7 @@ fun! s:NetrwMakeDir(usrhost) if newdirname == "" let @@= ykeep -" call Dret("NetrwMakeDir : user aborted with bare <cr>") +" call Dret("s:NetrwMakeDir : user aborted with bare <cr>") return endif @@ -5384,7 +5216,7 @@ fun! s:NetrwMakeDir(usrhost) keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24) endif let @@= ykeep -" call Dret("NetrwMakeDir : directory<".newdirname."> exists previously") +" call Dret("s:NetrwMakeDir : directory<".newdirname."> exists previously") return endif if s:FileReadable(fullnewdir) @@ -5392,7 +5224,7 @@ fun! s:NetrwMakeDir(usrhost) keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25) endif let @@= ykeep -" call Dret("NetrwMakeDir : file<".newdirname."> exists previously") +" call Dret("s:NetrwMakeDir : file<".newdirname."> exists previously") return endif @@ -5406,35 +5238,35 @@ fun! s:NetrwMakeDir(usrhost) endif else let netrw_origdir= s:NetrwGetcwd(1) - exe 'keepj lcd '.fnameescape(b:netrw_curdir) + call s:NetrwLcd(b:netrw_curdir) " call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">") " call Decho("exe sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1)) exe "sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1) if v:shell_error != 0 let @@= ykeep call netrw#ErrorMsg(s:ERROR,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",80) -" call Dret("NetrwMakeDir : failed: sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1)) +" call Dret("s:NetrwMakeDir : failed: sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1)) return endif if !g:netrw_keepdir - exe 'keepj lcd '.fnameescape(netrw_origdir) -" call Decho("netrw_keepdir=".g:netrw_keepdir.": keepjumps lcd ".fnameescape(netrw_origdir)." getcwd<".getcwd().">") +" call Decho("restoring netrw_origdir since g:netrw_keepdir=".g:netrw_keepdir) + call s:NetrwLcd(netrw_origdir) endif endif if v:shell_error == 0 " refresh listing " call Decho("refresh listing") - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) - call netrw#NetrwRestorePosn(svpos) + call netrw#RestorePosn(svpos) elseif !exists("g:netrw_quiet") call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",26) endif " redraw! elseif !exists("b:netrw_method") || b:netrw_method == 4 - " Remote mkdir: + " Remote mkdir: using ssh " call Decho("remote mkdir") let mkdircmd = s:MakeSshCmd(g:netrw_mkdir_cmd) let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname @@ -5442,28 +5274,466 @@ fun! s:NetrwMakeDir(usrhost) exe "sil! !".mkdircmd." ".shellescape(newdirname,1) if v:shell_error == 0 " refresh listing - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) elseif !exists("g:netrw_quiet") keepj call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27) endif " redraw! elseif b:netrw_method == 2 - let svpos= netrw#NetrwSavePosn() - call s:NetrwRemoteFtpCmd("",g:netrw_remote_mkdir.' "'.newdirname.'"') + " Remote mkdir: using ftp+.netrc + let svpos= netrw#SavePosn() +" call Decho("b:netrw_curdir<".b:netrw_curdir.">") + if exists("b:netrw_fname") +" call Decho("b:netrw_fname<".b:netrw_fname.">") + let remotepath= b:netrw_fname + else + let remotepath= "" + endif + call s:NetrwRemoteFtpCmd(remotepath,g:netrw_remote_mkdir.' "'.newdirname.'"') keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) + elseif b:netrw_method == 3 - let svpos= netrw#NetrwSavePosn() - call s:NetrwRemoteFtpCmd("",g:netrw_remote_mkdir.' "'.newdirname.'"') + " Remote mkdir: using ftp + machine, id, passwd, and fname (ie. no .netrc) + let svpos= netrw#SavePosn() +" call Decho("b:netrw_curdir<".b:netrw_curdir.">") + if exists("b:netrw_fname") +" call Decho("b:netrw_fname<".b:netrw_fname.">") + let remotepath= b:netrw_fname + else + let remotepath= "" + endif + call s:NetrwRemoteFtpCmd(remotepath,g:netrw_remote_mkdir.' "'.newdirname.'"') keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) endif let @@= ykeep -" call Dret("NetrwMakeDir") +" call Dret("s:NetrwMakeDir") +endfun + +" --------------------------------------------------------------------- +" s:TreeSqueezeDir: allows a shift-cr (gvim only) to squeeze the current tree-listing directory {{{2 +fun! s:TreeSqueezeDir(islocal) +" call Dfunc("s:TreeSqueezeDir(islocal=".a:islocal.")") + if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") + " its a tree-listing style + let curdepth = substitute(getline('.'),'^\(\%('.s:treedepthstring.'\)*\)[^'.s:treedepthstring.'].\{-}$','\1','e') + let iline = line(".") - 1 + let stopline = (exists("w:netrw_bannercnt")? (w:netrw_bannercnt + 1) : 1) +" call Decho("curdepth=".curdepth) +" call Decho("stopline#".stopline) +" call Decho("starting with line#".line(".").": ".getline('.')) + while iline > stopline + " find a line that has less depth + let depth = substitute(getline('.'),'^\(\%('.s:treedepthstring.'\)*\)[^'.s:treedepthstring.'].\{-}$','\1','e') +" call Decho("considering line#".line(".").": ".getline('.')) + if depth < curdepth + break + endif + norm! k + endwhile +" call Decho("squeezing at line#".line(".").": ".getline('.')) + call s:NetrwBrowse(a:islocal,s:NetrwBrowseChgDir(a:islocal,s:NetrwGetWord())) + endif +" call Dret("s:TreeSqueezeDir") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMaps: {{{2 +fun! s:NetrwMaps(islocal) +" call Dfunc("s:NetrwMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">") + + if g:netrw_mousemaps && g:netrw_retmap +" call Decho("set up Rexplore 2-leftmouse") + if !hasmapto("<Plug>NetrwReturn") + if maparg("<2-leftmouse>","n") == "" || maparg("<2-leftmouse>","n") =~ '^-$' +" call Decho("making map for 2-leftmouse") + nmap <unique> <silent> <2-leftmouse> <Plug>NetrwReturn + elseif maparg("<c-leftmouse>","n") == "" +" call Decho("making map for c-leftmouse") + nmap <unique> <silent> <c-leftmouse> <Plug>NetrwReturn + endif + endif + nno <silent> <Plug>NetrwReturn :Rexplore<cr> +" call Decho("made <Plug>NetrwReturn map") + endif + + if a:islocal +" call Decho("make local maps") + " local normal-mode maps + nnoremap <buffer> <silent> a :call <SID>NetrwHide(1)<cr> + nnoremap <buffer> <silent> % :call <SID>NetrwOpenFile(1)<cr> + nnoremap <buffer> <silent> c :call <SID>NetrwLcd(b:netrw_curdir)<cr> + nnoremap <buffer> <silent> C :let g:netrw_chgwin= winnr()<cr> + nnoremap <buffer> <silent> <cr> :call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr> + nnoremap <buffer> <silent> <s-cr> :call <SID>TreeSqueezeDir(1)<cr> + nnoremap <buffer> <silent> d :call <SID>NetrwMakeDir("")<cr> + nnoremap <buffer> <silent> - :call <SID>NetrwBrowseUpDir(1)<cr> + nnoremap <buffer> <silent> gb :<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr> + nnoremap <buffer> <silent> gd :<c-u>call <SID>NetrwForceChgDir(1,<SID>NetrwGetWord())<cr> + nnoremap <buffer> <silent> gf :<c-u>call <SID>NetrwForceFile(1,<SID>NetrwGetWord())<cr> + nnoremap <buffer> <silent> gh :<c-u>call <SID>NetrwHidden(1)<cr> + nnoremap <buffer> <silent> gp :<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr> + nnoremap <buffer> <silent> I :call <SID>NetrwBannerCtrl(1)<cr> + nnoremap <buffer> <silent> i :call <SID>NetrwListStyle(1)<cr> + nnoremap <buffer> <silent> mb :<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr> + nnoremap <buffer> <silent> mB :<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr> + nnoremap <buffer> <silent> mc :<c-u>call <SID>NetrwMarkFileCopy(1)<cr> + nnoremap <buffer> <silent> md :<c-u>call <SID>NetrwMarkFileDiff(1)<cr> + nnoremap <buffer> <silent> me :<c-u>call <SID>NetrwMarkFileEdit(1)<cr> + nnoremap <buffer> <silent> mf :<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr> + nnoremap <buffer> <silent> mF :<c-u>call <SID>NetrwUnmarkList(bufnr("%"),b:netrw_curdir)<cr> + nnoremap <buffer> <silent> mg :<c-u>call <SID>NetrwMarkFileGrep(1)<cr> + nnoremap <buffer> <silent> mh :<c-u>call <SID>NetrwMarkHideSfx(1)<cr> + nnoremap <buffer> <silent> mm :<c-u>call <SID>NetrwMarkFileMove(1)<cr> + nnoremap <buffer> <silent> mp :<c-u>call <SID>NetrwMarkFilePrint(1)<cr> + nnoremap <buffer> <silent> mr :<c-u>call <SID>NetrwMarkFileRegexp(1)<cr> + nnoremap <buffer> <silent> ms :<c-u>call <SID>NetrwMarkFileSource(1)<cr> + nnoremap <buffer> <silent> mt :<c-u>call <SID>NetrwMarkFileTgt(1)<cr> + nnoremap <buffer> <silent> mT :<c-u>call <SID>NetrwMarkFileTag(1)<cr> + nnoremap <buffer> <silent> mu :<c-u>call <SID>NetrwUnMarkFile(1)<cr> + nnoremap <buffer> <silent> mx :<c-u>call <SID>NetrwMarkFileExe(1)<cr> + nnoremap <buffer> <silent> mX :<c-u>call <SID>NetrwMarkFileVimCmd(1)<cr> + nnoremap <buffer> <silent> mz :<c-u>call <SID>NetrwMarkFileCompress(1)<cr> + nnoremap <buffer> <silent> O :call <SID>NetrwObtain(1)<cr> + nnoremap <buffer> <silent> o :call <SID>NetrwSplit(3)<cr> + nnoremap <buffer> <silent> p :call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr> + nnoremap <buffer> <silent> P :call <SID>NetrwPrevWinOpen(1)<cr> + nnoremap <buffer> <silent> qb :<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr> + nnoremap <buffer> <silent> qf :<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr> + nnoremap <buffer> <silent> qF :<c-u>call <SID>NetrwMarkFileQFEL(1,getqflist())<cr> + nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr> + nnoremap <buffer> <silent> s :call <SID>NetrwSortStyle(1)<cr> + nnoremap <buffer> <silent> S :call <SID>NetSortSequence(1)<cr> + nnoremap <buffer> <silent> t :call <SID>NetrwSplit(4)<cr> + nnoremap <buffer> <silent> Tb :<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr> + nnoremap <buffer> <silent> Th :<c-u>call <SID>NetrwSetTgt('h',v:count)<cr> + nnoremap <buffer> <silent> u :<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr> + nnoremap <buffer> <silent> U :<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr> + nnoremap <buffer> <silent> v :call <SID>NetrwSplit(5)<cr> + nnoremap <buffer> <silent> x :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr> + nnoremap <buffer> <silent> X :call <SID>NetrwLocalExecute(expand("<cword>"))"<cr> + " local insert-mode maps + inoremap <buffer> <silent> a <c-o>:call <SID>NetrwHide(1)<cr> + inoremap <buffer> <silent> c <c-o>:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr> + inoremap <buffer> <silent> c <c-o>:call <SID>NetrwLcd(b:netrw_curdir)<cr> + inoremap <buffer> <silent> C <c-o>:let g:netrw_chgwin= winnr()<cr> + inoremap <buffer> <silent> % <c-o>:call <SID>NetrwOpenFile(1)<cr> + inoremap <buffer> <silent> - <c-o>:call <SID>NetrwBrowseUpDir(1)<cr> + inoremap <buffer> <silent> <cr> <c-o>:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr> + inoremap <buffer> <silent> <s-cr> <c-o>:call <SID>TreeSqueezeDir(1)<cr> + inoremap <buffer> <silent> d <c-o>:call <SID>NetrwMakeDir("")<cr> + inoremap <buffer> <silent> gb <c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr> + inoremap <buffer> <silent> gh <c-o>:<c-u>call <SID>NetrwHidden(1)<cr> + inoremap <buffer> <silent> gp <c-o>:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr> + inoremap <buffer> <silent> I <c-o>:call <SID>NetrwBannerCtrl(1)<cr> + inoremap <buffer> <silent> i <c-o>:call <SID>NetrwListStyle(1)<cr> + inoremap <buffer> <silent> mb <c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr> + inoremap <buffer> <silent> mB <c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr> + inoremap <buffer> <silent> mc <c-o>:<c-u>call <SID>NetrwMarkFileCopy(1)<cr> + inoremap <buffer> <silent> md <c-o>:<c-u>call <SID>NetrwMarkFileDiff(1)<cr> + inoremap <buffer> <silent> me <c-o>:<c-u>call <SID>NetrwMarkFileEdit(1)<cr> + inoremap <buffer> <silent> mf <c-o>:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr> + inoremap <buffer> <silent> mg <c-o>:<c-u>call <SID>NetrwMarkFileGrep(1)<cr> + inoremap <buffer> <silent> mh <c-o>:<c-u>call <SID>NetrwMarkHideSfx(1)<cr> + inoremap <buffer> <silent> mm <c-o>:<c-u>call <SID>NetrwMarkFileMove(1)<cr> + inoremap <buffer> <silent> mp <c-o>:<c-u>call <SID>NetrwMarkFilePrint(1)<cr> + inoremap <buffer> <silent> mr <c-o>:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr> + inoremap <buffer> <silent> ms <c-o>:<c-u>call <SID>NetrwMarkFileSource(1)<cr> + inoremap <buffer> <silent> mT <c-o>:<c-u>call <SID>NetrwMarkFileTag(1)<cr> + inoremap <buffer> <silent> mt <c-o>:<c-u>call <SID>NetrwMarkFileTgt(1)<cr> + inoremap <buffer> <silent> mu <c-o>:<c-u>call <SID>NetrwUnMarkFile(1)<cr> + inoremap <buffer> <silent> mx <c-o>:<c-u>call <SID>NetrwMarkFileExe(1)<cr> + inoremap <buffer> <silent> mX <c-o>:<c-u>call <SID>NetrwMarkFileVimCmd(1)<cr> + inoremap <buffer> <silent> mz <c-o>:<c-u>call <SID>NetrwMarkFileCompress(1)<cr> + inoremap <buffer> <silent> O <c-o>:call <SID>NetrwObtain(1)<cr> + inoremap <buffer> <silent> o <c-o>:call <SID>NetrwSplit(3)<cr> + inoremap <buffer> <silent> p <c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr> + inoremap <buffer> <silent> P <c-o>:call <SID>NetrwPrevWinOpen(1)<cr> + inoremap <buffer> <silent> qb <c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr> + inoremap <buffer> <silent> qf <c-o>:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr> + inoremap <buffer> <silent> qF :<c-u>call <SID>NetrwMarkFileQFEL(1,getqflist())<cr> + inoremap <buffer> <silent> r <c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr> + inoremap <buffer> <silent> s <c-o>:call <SID>NetrwSortStyle(1)<cr> + inoremap <buffer> <silent> S <c-o>:call <SID>NetSortSequence(1)<cr> + inoremap <buffer> <silent> t <c-o>:call <SID>NetrwSplit(4)<cr> + inoremap <buffer> <silent> Tb <c-o>:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr> + inoremap <buffer> <silent> Th <c-o>:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr> + inoremap <buffer> <silent> u <c-o>:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr> + inoremap <buffer> <silent> U <c-o>:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr> + inoremap <buffer> <silent> v <c-o>:call <SID>NetrwSplit(5)<cr> + inoremap <buffer> <silent> x <c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr> + if !hasmapto('<Plug>NetrwHideEdit') + nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit + imap <buffer> <unique> <c-h> <Plug>NetrwHideEdit + endif + nnoremap <buffer> <silent> <Plug>NetrwHideEdit :call <SID>NetrwHideEdit(1)<cr> + if !hasmapto('<Plug>NetrwRefresh') + nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh + imap <buffer> <unique> <c-l> <Plug>NetrwRefresh + endif + nnoremap <buffer> <silent> <Plug>NetrwRefresh :call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr> + if s:didstarstar || !mapcheck("<s-down>","n") + nnoremap <buffer> <silent> <s-down> :Nexplore<cr> + inoremap <buffer> <silent> <s-down> :Nexplore<cr> + endif + if s:didstarstar || !mapcheck("<s-up>","n") + nnoremap <buffer> <silent> <s-up> :Pexplore<cr> + inoremap <buffer> <silent> <s-up> :Pexplore<cr> + endif + let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape) + if g:netrw_mousemaps == 1 + nmap <buffer> <leftmouse> <Plug>NetrwLeftmouse + nno <buffer> <silent> <Plug>NetrwLeftmouse <leftmouse>:call <SID>NetrwLeftmouse(1)<cr> + nmap <buffer> <middlemouse> <Plug>NetrwMiddlemouse + nno <buffer> <silent> <Plug>NetrwMiddlemouse <leftmouse>:call <SID>NetrwPrevWinOpen(1)<cr> + nmap <buffer> <s-leftmouse> <Plug>NetrwSLeftmouse + nno <buffer> <silent> <Plug>NetrwSLeftmouse <leftmouse>:call <SID>NetrwSLeftmouse(1)<cr> + nmap <buffer> <s-leftdrag> <Plug>NetrwSLeftdrag + nno <buffer> <silent> <Plug>NetrwSLeftdrag <leftmouse>:call <SID>NetrwSLeftdrag(1)<cr> + nmap <buffer> <2-leftmouse> <Plug>Netrw2Leftmouse + nmap <buffer> <silent> <Plug>Netrw2Leftmouse - + imap <buffer> <leftmouse> <Plug>ILeftmouse + ino <buffer> <silent> <Plug>ILeftmouse <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(1)<cr> + imap <buffer> <middlemouse> <Plug>IMiddlemouse + ino <buffer> <silent> <Plug>IMiddlemouse <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(1)<cr> + imap <buffer> <s-leftmouse> <Plug>ISLeftmouse + ino <buffer> <silent> <Plug>ISLeftmouse <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr> + exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' + exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' + exe 'inoremap <buffer> <silent> <rightmouse> <c-o><leftmouse><c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' + endif + exe 'nnoremap <buffer> <silent> <del> :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' + exe 'nnoremap <buffer> <silent> D :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' + exe 'nnoremap <buffer> <silent> R :call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>' + exe 'nnoremap <buffer> <silent> d :call <SID>NetrwMakeDir("")<cr>' + exe 'vnoremap <buffer> <silent> <del> :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' + exe 'vnoremap <buffer> <silent> D :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' + exe 'vnoremap <buffer> <silent> R :call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>' + exe 'inoremap <buffer> <silent> <del> <c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' + exe 'inoremap <buffer> <silent> D <c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' + exe 'inoremap <buffer> <silent> R <c-o>:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>' + exe 'inoremap <buffer> <silent> d <c-o>:call <SID>NetrwMakeDir("")<cr>' + nnoremap <buffer> <F1> :he netrw-quickhelp<cr> + + else " remote +" call Decho("make remote maps") + call s:RemotePathAnalysis(b:netrw_curdir) + " remote normal-mode maps + nnoremap <buffer> <silent> <cr> :call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr> + nnoremap <buffer> <silent> <s-cr> :call <SID>TreeSqueezeDir(0)<cr> + nnoremap <buffer> <silent> <c-l> :call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> + nnoremap <buffer> <silent> - :call <SID>NetrwBrowseUpDir(0)<cr> + nnoremap <buffer> <silent> a :call <SID>NetrwHide(0)<cr> + nnoremap <buffer> <silent> mb :<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr> + nnoremap <buffer> <silent> mc :<c-u>call <SID>NetrwMarkFileCopy(0)<cr> + nnoremap <buffer> <silent> md :<c-u>call <SID>NetrwMarkFileDiff(0)<cr> + nnoremap <buffer> <silent> me :<c-u>call <SID>NetrwMarkFileEdit(0)<cr> + nnoremap <buffer> <silent> mf :<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr> + nnoremap <buffer> <silent> mF :<c-u>call <SID>NetrwUnmarkList(bufnr("%"),b:netrw_curdir)<cr> + nnoremap <buffer> <silent> mg :<c-u>call <SID>NetrwMarkFileGrep(0)<cr> + nnoremap <buffer> <silent> mh :<c-u>call <SID>NetrwMarkHideSfx(0)<cr> + nnoremap <buffer> <silent> mm :<c-u>call <SID>NetrwMarkFileMove(0)<cr> + nnoremap <buffer> <silent> mp :<c-u>call <SID>NetrwMarkFilePrint(0)<cr> + nnoremap <buffer> <silent> mr :<c-u>call <SID>NetrwMarkFileRegexp(0)<cr> + nnoremap <buffer> <silent> ms :<c-u>call <SID>NetrwMarkFileSource(0)<cr> + nnoremap <buffer> <silent> mt :<c-u>call <SID>NetrwMarkFileTgt(0)<cr> + nnoremap <buffer> <silent> mT :<c-u>call <SID>NetrwMarkFileTag(0)<cr> + nnoremap <buffer> <silent> mu :<c-u>call <SID>NetrwUnMarkFile(0)<cr> + nnoremap <buffer> <silent> mx :<c-u>call <SID>NetrwMarkFileExe(0)<cr> + nnoremap <buffer> <silent> mX :<c-u>call <SID>NetrwMarkFileVimCmd(0)<cr> + nnoremap <buffer> <silent> mz :<c-u>call <SID>NetrwMarkFileCompress(0)<cr> + nnoremap <buffer> <silent> gb :<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr> + nnoremap <buffer> <silent> gd :<c-u>call <SID>NetrwForceChgDir(0,<SID>NetrwGetWord())<cr> + nnoremap <buffer> <silent> gf :<c-u>call <SID>NetrwForceFile(0,<SID>NetrwGetWord())<cr> + nnoremap <buffer> <silent> gh :<c-u>call <SID>NetrwHidden(0)<cr> + nnoremap <buffer> <silent> gp :<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr> + nnoremap <buffer> <silent> C :let g:netrw_chgwin= winnr()<cr> + nnoremap <buffer> <silent> i :call <SID>NetrwListStyle(0)<cr> + nnoremap <buffer> <silent> I :call <SID>NetrwBannerCtrl(1)<cr> + nnoremap <buffer> <silent> o :call <SID>NetrwSplit(0)<cr> + nnoremap <buffer> <silent> O :call <SID>NetrwObtain(0)<cr> + nnoremap <buffer> <silent> p :call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr> + nnoremap <buffer> <silent> P :call <SID>NetrwPrevWinOpen(0)<cr> + nnoremap <buffer> <silent> qb :<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr> + nnoremap <buffer> <silent> mB :<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr> + nnoremap <buffer> <silent> qf :<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr> + nnoremap <buffer> <silent> qF :<c-u>call <SID>NetrwMarkFileQFEL(0,getqflist())<cr> + nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> + nnoremap <buffer> <silent> s :call <SID>NetrwSortStyle(0)<cr> + nnoremap <buffer> <silent> S :call <SID>NetSortSequence(0)<cr> + nnoremap <buffer> <silent> t :call <SID>NetrwSplit(1)<cr> + nnoremap <buffer> <silent> Tb :<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr> + nnoremap <buffer> <silent> Th :<c-u>call <SID>NetrwSetTgt('h',v:count)<cr> + nnoremap <buffer> <silent> u :<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr> + nnoremap <buffer> <silent> U :<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr> + nnoremap <buffer> <silent> v :call <SID>NetrwSplit(2)<cr> + nnoremap <buffer> <silent> x :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr> + nnoremap <buffer> <silent> % :call <SID>NetrwOpenFile(0)<cr> + " remote insert-mode maps + inoremap <buffer> <silent> <cr> <c-o>:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr> + inoremap <buffer> <silent> <c-l> <c-o>:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> + inoremap <buffer> <silent> <s-cr> <c-o>:call <SID>TreeSqueezeDir(0)<cr> + inoremap <buffer> <silent> - <c-o>:call <SID>NetrwBrowseUpDir(0)<cr> + inoremap <buffer> <silent> a <c-o>:call <SID>NetrwHide(0)<cr> + inoremap <buffer> <silent> mb <c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr> + inoremap <buffer> <silent> mc <c-o>:<c-u>call <SID>NetrwMarkFileCopy(0)<cr> + inoremap <buffer> <silent> md <c-o>:<c-u>call <SID>NetrwMarkFileDiff(0)<cr> + inoremap <buffer> <silent> me <c-o>:<c-u>call <SID>NetrwMarkFileEdit(0)<cr> + inoremap <buffer> <silent> mf <c-o>:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr> + inoremap <buffer> <silent> mg <c-o>:<c-u>call <SID>NetrwMarkFileGrep(0)<cr> + inoremap <buffer> <silent> mh <c-o>:<c-u>call <SID>NetrwMarkHideSfx(0)<cr> + inoremap <buffer> <silent> mm <c-o>:<c-u>call <SID>NetrwMarkFileMove(0)<cr> + inoremap <buffer> <silent> mp <c-o>:<c-u>call <SID>NetrwMarkFilePrint(0)<cr> + inoremap <buffer> <silent> mr <c-o>:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr> + inoremap <buffer> <silent> ms <c-o>:<c-u>call <SID>NetrwMarkFileSource(0)<cr> + inoremap <buffer> <silent> mt <c-o>:<c-u>call <SID>NetrwMarkFileTgt(0)<cr> + inoremap <buffer> <silent> mT <c-o>:<c-u>call <SID>NetrwMarkFileTag(0)<cr> + inoremap <buffer> <silent> mu <c-o>:<c-u>call <SID>NetrwUnMarkFile(0)<cr> + inoremap <buffer> <silent> mx <c-o>:<c-u>call <SID>NetrwMarkFileExe(0)<cr> + inoremap <buffer> <silent> mX <c-o>:<c-u>call <SID>NetrwMarkFileVimCmd(0)<cr> + inoremap <buffer> <silent> mz <c-o>:<c-u>call <SID>NetrwMarkFileCompress(0)<cr> + inoremap <buffer> <silent> gb <c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr> + inoremap <buffer> <silent> gh <c-o>:<c-u>call <SID>NetrwHidden(0)<cr> + inoremap <buffer> <silent> gp <c-o>:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr> + inoremap <buffer> <silent> C <c-o>:let g:netrw_chgwin= winnr()<cr> + inoremap <buffer> <silent> i <c-o>:call <SID>NetrwListStyle(0)<cr> + inoremap <buffer> <silent> I <c-o>:call <SID>NetrwBannerCtrl(1)<cr> + inoremap <buffer> <silent> o <c-o>:call <SID>NetrwSplit(0)<cr> + inoremap <buffer> <silent> O <c-o>:call <SID>NetrwObtain(0)<cr> + inoremap <buffer> <silent> p <c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr> + inoremap <buffer> <silent> P <c-o>:call <SID>NetrwPrevWinOpen(0)<cr> + inoremap <buffer> <silent> qb <c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr> + inoremap <buffer> <silent> mB <c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr> + inoremap <buffer> <silent> qf <c-o>:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr> + inoremap <buffer> <silent> qF :<c-u>call <SID>NetrwMarkFileQFEL(0,getqflist())<cr> + inoremap <buffer> <silent> r <c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> + inoremap <buffer> <silent> s <c-o>:call <SID>NetrwSortStyle(0)<cr> + inoremap <buffer> <silent> S <c-o>:call <SID>NetSortSequence(0)<cr> + inoremap <buffer> <silent> t <c-o>:call <SID>NetrwSplit(1)<cr> + inoremap <buffer> <silent> Tb <c-o>:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr> + inoremap <buffer> <silent> Th <c-o>:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr> + inoremap <buffer> <silent> u <c-o>:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr> + inoremap <buffer> <silent> U <c-o>:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr> + inoremap <buffer> <silent> v <c-o>:call <SID>NetrwSplit(2)<cr> + inoremap <buffer> <silent> x <c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr> + inoremap <buffer> <silent> % <c-o>:call <SID>NetrwOpenFile(0)<cr> + if !hasmapto('<Plug>NetrwHideEdit') + nmap <buffer> <c-h> <Plug>NetrwHideEdit + imap <buffer> <c-h> <Plug>NetrwHideEdit + endif + nnoremap <buffer> <silent> <Plug>NetrwHideEdit :call <SID>NetrwHideEdit(0)<cr> + if !hasmapto('<Plug>NetrwRefresh') + nmap <buffer> <c-l> <Plug>NetrwRefresh + imap <buffer> <c-l> <Plug>NetrwRefresh + endif + + let mapsafepath = escape(s:path, s:netrw_map_escape) + let mapsafeusermach = escape(s:user.s:machine, s:netrw_map_escape) + + nnoremap <buffer> <silent> <Plug>NetrwRefresh :call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> + if g:netrw_mousemaps == 1 + nmap <leftmouse> <Plug>NetrwLeftmouse + nno <buffer> <silent> <Plug>NetrwLeftmouse <leftmouse>:call <SID>NetrwLeftmouse(0)<cr> + nmap <buffer> <leftdrag> <Plug>NetrwLeftdrag + nno <buffer> <silent> <Plug>NetrwLeftdrag :call <SID>NetrwLeftdrag(0)<cr> + nmap <buffer> <s-leftmouse> <Plug>NetrwSLeftmouse + nno <buffer> <silent> <Plug>NetrwSLeftmouse <leftmouse>:call <SID>NetrwSLeftmouse(0)<cr> + nmap <buffer> <s-leftdrag> <Plug>NetrwSLeftdrag + nno <buffer> <silent> <Plug>NetrwSLeftdrag <leftmouse>:call <SID>NetrwSLeftdrag(0)<cr> + nmap <middlemouse> <Plug>NetrwMiddlemouse + nno <buffer> <silent> <middlemouse> <Plug>NetrwMiddlemouse <leftmouse>:call <SID>NetrwPrevWinOpen(0)<cr> + nmap <buffer> <2-leftmouse> <Plug>Netrw2Leftmouse + nmap <buffer> <silent> <Plug>Netrw2Leftmouse - + imap <buffer> <leftmouse> <Plug>ILeftmouse + ino <buffer> <silent> <Plug>ILeftmouse <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(0)<cr> + imap <buffer> <middlemouse> <Plug>IMiddlemouse + ino <buffer> <silent> <Plug>IMiddlemouse <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(0)<cr> + imap <buffer> <s-leftmouse> <Plug>ISLeftmouse + ino <buffer> <silent> <Plug>ISLeftmouse <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr> + exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' + exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' + exe 'inoremap <buffer> <silent> <rightmouse> <c-o><leftmouse><c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' + endif + exe 'nnoremap <buffer> <silent> <del> :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' + exe 'nnoremap <buffer> <silent> d :call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>' + exe 'nnoremap <buffer> <silent> D :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' + exe 'nnoremap <buffer> <silent> R :call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' + exe 'vnoremap <buffer> <silent> <del> :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' + exe 'vnoremap <buffer> <silent> D :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' + exe 'vnoremap <buffer> <silent> R :call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' + exe 'inoremap <buffer> <silent> <del> <c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' + exe 'inoremap <buffer> <silent> d <c-o>:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>' + exe 'inoremap <buffer> <silent> D <c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' + exe 'inoremap <buffer> <silent> R <c-o>:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' + nnoremap <buffer> <F1> :he netrw-quickhelp<cr> + inoremap <buffer> <F1> <c-o>:he netrw-quickhelp<cr> + endif + + keepj call s:SetRexDir(a:islocal,b:netrw_curdir) + +" call Dret("s:NetrwMaps") +endfun + +" --------------------------------------------------------------------- +" s:NetrwCommands: sets up commands available only in the netrw buffer windows {{{2 +fun! s:NetrwCommands(islocal) +" call Dfunc("s:NetrwCommands(islocal=".a:islocal.")") + + com! Rexplore if exists("w:netrw_rexlocal")|call s:NetrwRexplore(w:netrw_rexlocal,exists("w:netrw_rexdir")? w:netrw_rexdir : ".")|else|call netrw#ErrorMsg(s:WARNING,"not a former netrw window",79)|endif + if a:islocal + com! -buffer -nargs=+ -complete=file MF call s:NetrwMarkFiles(1,<f-args>) + else + com! -buffer -nargs=+ -complete=file MF call s:NetrwMarkFiles(0,<f-args>) + endif + com! -buffer -nargs=? -complete=file MT call s:NetrwMarkTarget(<q-args>) + +" call Dret("s:NetrwCommands") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFiles: apply s:NetrwMarkFile() to named file(s) {{{2 +" glob()ing only works with local files +fun! s:NetrwMarkFiles(islocal,...) +" call Dfunc("s:NetrwMarkFiles(islocal=".a:islocal."...) a:0=".a:0) + let i = 1 + while i <= a:0 + if a:islocal + let mffiles= glob(a:{i},0,1) + else + let mffiles= [a:{i}] + endif +" call Decho("mffiles".string(mffiles)) + for mffile in mffiles +" call Decho("mffile<".mffile.">") + call s:NetrwMarkFile(a:islocal,mffile) + endfor + let i= i + 1 + endwhile +" call Dret("s:NetrwMarkFiles") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkTarget: {{{2 +fun! s:NetrwMarkTarget(...) +" call Dfunc("s:NetrwMarkTarget() a:0=".a:0) + if a:0 == 0 || (a:0 == 1 && a:1 == "") + let tgt= b:netrw_curdir + else + let tgt= a:1 + endif +" call Decho("tgt<".tgt.">") + let s:netrwmftgt = tgt + let s:netrwmftgt_islocal = tgt !~ '^\a\+://' + let curislocal = b:netrw_curdir !~ '^\a\+://' + let svpos = netrw#SavePosn() + call s:NetrwRefresh(curislocal,s:NetrwBrowseChgDir(curislocal,'./')) + call netrw#RestorePosn(svpos) +" call Dret("s:NetrwMarkTarget") endfun " --------------------------------------------------------------------- @@ -5495,7 +5765,16 @@ fun! s:NetrwMarkFile(islocal,fname) let ykeep = @@ let curbufnr= bufnr("%") let curdir = b:netrw_curdir - let trailer = '[@=|\/\*]\=\ze\%( \|\t\|$\)' + if a:fname =~ '^\a' + let leader= '\<' + else + let leader= '' + endif + if a:fname =~ '\a$' + let trailer = '\>[@=|\/\*]\=\ze\%( \|\t\|$\)' + else + let trailer = '[@=|\/\*]\=\ze\%( \|\t\|$\)' + endif if exists("s:netrwmarkfilelist_{curbufnr}") " markfile list pre-exists @@ -5507,7 +5786,7 @@ fun! s:NetrwMarkFile(islocal,fname) " append filename to buffer's markfilelist " call Decho("append filename<".a:fname."> to local markfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">") call add(s:netrwmarkfilelist_{curbufnr},a:fname) - let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(a:fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").trailer + let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|'.leader.escape(a:fname,g:netrw_markfileesc).trailer else " remove filename from buffer's markfilelist @@ -5521,12 +5800,12 @@ fun! s:NetrwMarkFile(islocal,fname) " rebuild match list to display markings correctly " call Decho("rebuild s:netrwmarkfilemtch_".curbufnr) let s:netrwmarkfilemtch_{curbufnr}= "" - let first = 1 + let first = 1 for fname in s:netrwmarkfilelist_{curbufnr} if first - let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").trailer + let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.leader.escape(fname,g:netrw_markfileesc).trailer else - let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").trailer + let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|'.leader.escape(fname,g:netrw_markfileesc).trailer endif let first= 0 endfor @@ -5544,9 +5823,9 @@ fun! s:NetrwMarkFile(islocal,fname) " build initial markfile matching pattern if a:fname =~ '/$' - let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc) + let s:netrwmarkfilemtch_{curbufnr}= leader.escape(a:fname,g:netrw_markfileesc) else - let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc).trailer + let s:netrwmarkfilemtch_{curbufnr}= leader.escape(a:fname,g:netrw_markfileesc).trailer endif " call Decho("ending s:netrwmarkfilemtch_".curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">") endif @@ -5598,7 +5877,7 @@ endfun " g:netrw_decompress = { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf", ".xz" : "unxz"} fun! s:NetrwMarkFileCompress(islocal) " call Dfunc("s:NetrwMarkFileCompress(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curdir = b:netrw_curdir let curbufnr = bufnr("%") @@ -5653,7 +5932,7 @@ fun! s:NetrwMarkFileCompress(islocal) call s:NetrwUnmarkList(curbufnr,curdir) keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) endif " call Dret("s:NetrwMarkFileCompress") endfun @@ -5767,7 +6046,7 @@ fun! s:NetrwMarkFileCopy(islocal,...) elseif !a:islocal && s:netrwmftgt_islocal " Copy marked files, remote directory to local directory " call Decho("copy from remote to local") - keepj call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt) + keepj call netrw#Obtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt) elseif !a:islocal && !s:netrwmftgt_islocal " Copy marked files, remote directory to remote directory @@ -5788,15 +6067,15 @@ fun! s:NetrwMarkFileCopy(islocal,...) endif endif if isdirectory(tmpdir) - exe "keepj lcd ".fnameescape(tmpdir) - keepj call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir) + call s:NetrwLcd(tmpdir) + keepj call netrw#Obtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir) let localfiles= map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),'substitute(v:val,"^.*/","","")') keepj call s:NetrwUpload(localfiles,s:netrwmftgt) if getcwd() == tmpdir for fname in s:netrwmarkfilelist_{bufnr('%')} keepj call s:NetrwDelete(fname) endfor - exe "keepj lcd ".fnameescape(curdir) + call s:NetrwLcd(curdir) exe "sil !".g:netrw_localrmdir." ".shellescape(tmpdir,1) if v:shell_error != 0 call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localrmdir<".g:netrw_localrmdir."> to something that works",80) @@ -5804,7 +6083,7 @@ fun! s:NetrwMarkFileCopy(islocal,...) return endif else - exe "keepj lcd ".fnameescape(curdir) + call s:NetrwLcd(curdir) endif endif endif @@ -5826,7 +6105,7 @@ fun! s:NetrwMarkFileCopy(islocal,...) keepj call s:NetrwRefreshDir(a:islocal,curdir) endif if g:netrw_fastbrowse <= 1 - keepj call s:LocalBrowseShellCmdRefresh() + keepj call s:LocalBrowseRefresh() endif " call Dret("s:NetrwMarkFileCopy 1") @@ -5850,7 +6129,7 @@ fun! s:NetrwMarkFileDiff(islocal) endif " call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr})) - if exists("s:netrwmarkfilelist_{."curbufnr}") + if exists("s:netrwmarkfilelist_{".curbufnr."}") let cnt = 0 let curdir = b:netrw_curdir for fname in s:netrwmarkfilelist @@ -5942,7 +6221,7 @@ endfun " Uses the local marked-file list. fun! s:NetrwMarkFileExe(islocal) " call Dfunc("s:NetrwMarkFileExe(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curdir = b:netrw_curdir let curbufnr = bufnr("%") @@ -6000,7 +6279,7 @@ fun! s:NetrwMarkFileExe(islocal) " refresh the listing keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) else keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59) endif @@ -6014,7 +6293,7 @@ endfun " Uses the local marked file list. fun! s:NetrwMarkHideSfx(islocal) " call Dfunc("s:NetrwMarkHideSfx(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curbufnr = bufnr("%") " s:netrwmarkfilelist_{curbufnr}: the List of marked files @@ -6057,7 +6336,7 @@ fun! s:NetrwMarkHideSfx(islocal) " refresh the listing keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) else keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59) endif @@ -6070,7 +6349,7 @@ endfun " Uses the local marked-file list. fun! s:NetrwMarkFileVimCmd(islocal) " call Dfunc("s:NetrwMarkFileVimCmd(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curdir = b:netrw_curdir let curbufnr = bufnr("%") @@ -6104,7 +6383,6 @@ fun! s:NetrwMarkFileVimCmd(islocal) exe cmd exe "sil! keepalt wq!" else - " COMBAK -- not supported yet " call Decho("remote<".fname.">: exe ".cmd." : NOT SUPPORTED YET") echo "sorry, \"mX\" not supported yet for remote files" endif @@ -6115,7 +6393,7 @@ fun! s:NetrwMarkFileVimCmd(islocal) " refresh the listing keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) else keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59) endif @@ -6129,7 +6407,7 @@ endfun " Uses the local marked file list. fun! s:NetrwMarkHideSfx(islocal) " call Dfunc("s:NetrwMarkHideSfx(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curbufnr = bufnr("%") " s:netrwmarkfilelist_{curbufnr}: the List of marked files @@ -6172,7 +6450,7 @@ fun! s:NetrwMarkHideSfx(islocal) " refresh the listing keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) else keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59) endif @@ -6185,7 +6463,7 @@ endfun " Uses the global markfilelist fun! s:NetrwMarkFileGrep(islocal) " call Dfunc("s:NetrwMarkFileGrep(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curbufnr = bufnr("%") if exists("s:netrwmarkfilelist") @@ -6225,7 +6503,7 @@ fun! s:NetrwMarkFileGrep(islocal) echo "(use :cn, :cp to navigate, :Rex to return)" 2match none - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) if exists("nonisi") " original, user-supplied pattern did not begin with a character from isident @@ -6266,7 +6544,7 @@ fun! s:NetrwMarkFileMove(islocal) if a:islocal && s:netrwmftgt_islocal " move: local -> local " call Decho("move from local to local") -" call Decho("(s:NetrwMarkFileMove) local to local move") +" call Decho("local to local move") if !executable(g:netrw_localmovecmd) && g:netrw_localmovecmd !~ '\<cmd\s' call netrw#ErrorMsg(s:ERROR,"g:netrw_localmovecmd<".g:netrw_localmovecmd."> not executable on your system, aborting",90) " call Dfunc("s:NetrwMarkFileMove : g:netrw_localmovecmd<".g:netrw_localmovecmd."> n/a!") @@ -6361,7 +6639,7 @@ fun! s:NetrwMarkFileMove(islocal) endif if g:netrw_fastbrowse <= 1 " call Decho("since g:netrw_fastbrowse=".g:netrw_fastbrowse.", perform shell cmd refresh") - keepj call s:LocalBrowseShellCmdRefresh() + keepj call s:LocalBrowseRefresh() endif " call Dret("s:NetrwMarkFileMove") @@ -6439,8 +6717,8 @@ fun! s:NetrwMarkFileRegexp(islocal) let eikeep = &ei let areg = @a sil keepj %y a - set ei=all ma -" call Decho("set ei=all ma") + setl ei=all ma +" call Decho("setl ei=all ma") 1split keepj call s:NetrwEnew() keepj call s:NetrwSafeOptions() @@ -6448,7 +6726,7 @@ fun! s:NetrwMarkFileRegexp(islocal) keepj 2 let bannercnt= search('^" =====','W') exe "sil keepj 1,".bannercnt."d" - set bt=nofile + setl bt=nofile if g:netrw_liststyle == s:LONGLIST sil keepj %s/\s\{2,}\S.*$//e call histdel("/",-1) @@ -6520,7 +6798,7 @@ endfun " Uses the global markfilelist fun! s:NetrwMarkFileTag(islocal) " call Dfunc("s:NetrwMarkFileTag(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curdir = b:netrw_curdir let curbufnr = bufnr("%") @@ -6546,7 +6824,7 @@ fun! s:NetrwMarkFileTag(islocal) endif else let cmd = s:RemoteSystem(g:netrw_ctags." ".netrwmarkfilelist) - call netrw#NetrwObtain(a:islocal,"tags") + call netrw#Obtain(a:islocal,"tags") let curdir= b:netrw_curdir 1split e tags @@ -6558,7 +6836,7 @@ fun! s:NetrwMarkFileTag(islocal) endif 2match none call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - call netrw#NetrwRestorePosn(svpos) + call netrw#RestorePosn(svpos) endif " call Dret("s:NetrwMarkFileTag") @@ -6572,7 +6850,7 @@ endfun " 1=target directory is local fun! s:NetrwMarkFileTgt(islocal) " call Dfunc("s:NetrwMarkFileTgt(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curdir = b:netrw_curdir let hadtgt = exists("s:netrwmftgt") if !exists("w:netrw_bannercnt") @@ -6586,10 +6864,10 @@ fun! s:NetrwMarkFileTgt(islocal) " call Decho("cursor in banner region, and target already is <".b:netrw_curdir.">: removing target") unlet s:netrwmftgt s:netrwmftgt_islocal if g:netrw_fastbrowse <= 1 - call s:LocalBrowseShellCmdRefresh() + call s:LocalBrowseRefresh() endif call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - call netrw#NetrwRestorePosn(svpos) + call netrw#RestorePosn(svpos) " call Dret("s:NetrwMarkFileTgt : removed target") return else @@ -6626,10 +6904,10 @@ fun! s:NetrwMarkFileTgt(islocal) let s:netrwmftgt_islocal= a:islocal if g:netrw_fastbrowse <= 1 - call s:LocalBrowseShellCmdRefresh() + call s:LocalBrowseRefresh() endif call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - call netrw#NetrwRestorePosn(svpos) + call netrw#RestorePosn(svpos) if !hadtgt sil! keepj norm! j endif @@ -6731,7 +7009,7 @@ endfun " s:NetrwUnMarkFile: {{{2 fun! s:NetrwUnMarkFile(islocal) " call Dfunc("s:NetrwUnMarkFile(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curbufnr = bufnr("%") " unmark marked file list (although I expect s:NetrwUpload() @@ -6745,7 +7023,7 @@ fun! s:NetrwUnMarkFile(islocal) endif " call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - call netrw#NetrwRestorePosn(svpos) + call netrw#RestorePosn(svpos) " call Dret("s:NetrwUnMarkFile") endfun @@ -6860,10 +7138,10 @@ fun! s:NetrwObtain(islocal) let ykeep= @@ if exists("s:netrwmarkfilelist_{bufnr('%')}") let islocal= s:netrwmarkfilelist_{bufnr('%')}[1] !~ '^\a\+://' - call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr('%')}) + call netrw#Obtain(islocal,s:netrwmarkfilelist_{bufnr('%')}) call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir) else - call netrw#NetrwObtain(a:islocal,expand("<cWORD>")) + call netrw#Obtain(a:islocal,expand("<cWORD>")) endif let @@= ykeep @@ -6883,7 +7161,7 @@ fun! s:NetrwPrevWinOpen(islocal) let ykeep= @@ " grab a copy of the b:netrw_curdir to pass it along to newly split windows - let curdir = b:netrw_curdir + let curdir = b:netrw_curdir " get last window number and the word currently under the cursor let origwin = winnr() @@ -6891,30 +7169,31 @@ fun! s:NetrwPrevWinOpen(islocal) let curword = s:NetrwGetWord() let choice = 0 let s:treedir = s:NetrwTreeDir() -" call Decho("(s:NetrwPrevWinOpen) winnr($)#".lastwinnr." curword<".curword.">") + let curdir = s:treedir +" call Decho("winnr($)#".lastwinnr." curword<".curword.">") let didsplit = 0 if lastwinnr == 1 " if only one window, open a new one first -" call Decho("(s:NetrwPrevWinOpen) only one window, so open a new one (g:netrw_alto=".g:netrw_alto.")") +" call Decho("only one window, so open a new one (g:netrw_alto=".g:netrw_alto.")") if g:netrw_preview let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize -" call Decho("(s:NetrwPrevWinOpen) exe ".(g:netrw_alto? "top " : "bot ")."vert ".winsz."wincmd s") +" call Decho("exe ".(g:netrw_alto? "top " : "bot ")."vert ".winsz."wincmd s") exe (g:netrw_alto? "top " : "bot ")."vert ".winsz."wincmd s" else let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize -" call Decho("(s:NetrwPrevWinOpen) exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s") +" call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s") exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s" endif let didsplit = 1 -" call Decho("(s:NetrwPrevWinOpen) did split") +" call Decho("did split") else keepj call s:SaveBufVars() let eikeep= &ei - set ei=all + setl ei=all wincmd p -" call Decho("(s:NetrwPrevWinOpen) wincmd p (now in win#".winnr().")") +" call Decho("wincmd p (now in win#".winnr().") curdir<".curdir.">") " prevwinnr: the window number of the "prev" window " prevbufnr: the buffer number of the buffer in the "prev" window @@ -6925,15 +7204,15 @@ fun! s:NetrwPrevWinOpen(islocal) let prevmod = &mod let bnrcnt = 0 keepj call s:RestoreBufVars() -" call Decho("(s:NetrwPrevWinOpen) after wincmd p: win#".winnr()." win($)#".winnr("$")." origwin#".origwin." &mod=".&mod." bufname(%)<".bufname("%")."> prevbufnr=".prevbufnr) +" call Decho("after wincmd p: win#".winnr()." win($)#".winnr("$")." origwin#".origwin." &mod=".&mod." bufname(%)<".bufname("%")."> prevbufnr=".prevbufnr) " if the previous window's buffer has been changed (ie. its modified flag is set), " and it doesn't appear in any other extant window, then ask the " user if s/he wants to abandon modifications therein. if prevmod -" call Decho("(s:NetrwPrevWinOpen) detected that prev window's buffer has been modified: prevbufnr=".prevbufnr." winnr()#".winnr()) +" call Decho("detected that prev window's buffer has been modified: prevbufnr=".prevbufnr." winnr()#".winnr()) windo if winbufnr(0) == prevbufnr | let bnrcnt=bnrcnt+1 | endif -" call Decho("(s:NetrwPrevWinOpen) prevbufnr=".prevbufnr." bnrcnt=".bnrcnt." buftype=".&bt." winnr()=".winnr()." prevwinnr#".prevwinnr) +" call Decho("prevbufnr=".prevbufnr." bnrcnt=".bnrcnt." buftype=".&bt." winnr()=".winnr()." prevwinnr#".prevwinnr) exe prevwinnr."wincmd w" if bnrcnt == 1 && &hidden == 0 @@ -6958,12 +7237,12 @@ fun! s:NetrwPrevWinOpen(islocal) elseif choice == 2 " No -- don't worry about changed file, just browse anyway -" call Decho("(s:NetrwPrevWinOpen) don't worry about chgd file, just browse anyway (winnr($)#".winnr("$").")") +" call Decho("don't worry about chgd file, just browse anyway (winnr($)#".winnr("$").")") echomsg "**note** changes to ".prevbufname." abandoned" else " Cancel -- don't do this -" call Decho("(s:NetrwPrevWinOpen) cancel, don't browse, switch to win#".origwin) +" call Decho("cancel, don't browse, switch to win#".origwin) exe origwin."wincmd w" let &ei= eikeep let @@ = ykeep @@ -7034,7 +7313,7 @@ fun! s:NetrwUpload(fname,tgt,...) " call Decho("handle uploading a list of files via scp") let curdir= getcwd() if a:tgt =~ '^scp:' - exe "keepjumps sil lcd ".fnameescape(fromdir) + call s:NetrwLcd(fromdir) let filelist= deepcopy(s:netrwmarkfilelist_{bufnr('%')}) let args = join(map(filelist,"shellescape(v:val, 1)")) if exists("g:netrw_port") && g:netrw_port != "" @@ -7046,7 +7325,7 @@ fun! s:NetrwUpload(fname,tgt,...) let tgt = substitute(a:tgt,'^scp://[^/]\+/\(.*\)$','\1','') " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1)) exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1) - exe "keepjumps sil lcd ".fnameescape(curdir) + call s:NetrwLcd(curdir) elseif a:tgt =~ '^ftp:' call s:NetrwMethod(a:tgt) @@ -7214,7 +7493,7 @@ fun! s:NetrwRefresh(islocal,dirname) " call Decho("setl ma noro") " call Decho("clear buffer<".expand("%")."> with :%d") let ykeep = @@ - let screenposn = netrw#NetrwSavePosn() + let screenposn = netrw#SavePosn() " call Decho("clearing buffer prior to refresh") sil! keepj %d if a:islocal @@ -7222,7 +7501,7 @@ fun! s:NetrwRefresh(islocal,dirname) else keepj call s:NetrwBrowse(a:islocal,a:dirname) endif - keepj call netrw#NetrwRestorePosn(screenposn) + keepj call netrw#RestorePosn(screenposn) " restore file marks if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != "" @@ -7241,7 +7520,7 @@ endfun " --------------------------------------------------------------------- " s:NetrwRefreshDir: refreshes a directory by name {{{2 " Called by NetrwMarkFileCopy() -" Interfaces to s:NetrwRefresh() and s:LocalBrowseShellCmdRefresh() +" Interfaces to s:NetrwRefresh() and s:LocalBrowseRefresh() fun! s:NetrwRefreshDir(islocal,dirname) " call Dfunc("s:NetrwRefreshDir(islocal=".a:islocal." dirname<".a:dirname.">) g:netrw_fastbrowse=".g:netrw_fastbrowse) if g:netrw_fastbrowse == 0 @@ -7266,7 +7545,7 @@ fun! s:NetrwRefreshDir(islocal,dirname) elseif g:netrw_fastbrowse <= 1 " call Decho("medium-speed mode: refresh local buffers only") - keepj call s:LocalBrowseShellCmdRefresh() + keepj call s:LocalBrowseRefresh() endif " call Dret("s:NetrwRefreshDir") endfun @@ -7328,7 +7607,7 @@ fun! s:NetrwSetSort() let priority = priority + 1 endwhile if exists("starpriority") - exe 'sil keepj '.w:netrw_bannercnt.',$v/^\d\{3}'.g:netrw_sepchr.'/s/^/'.starpriority.'/' + exe 'sil keepj '.w:netrw_bannercnt.',$v/^\d\{3}'.g:netrw_sepchr.'/s/^/'.starpriority.'/e' keepj call histdel("/",-1) endif @@ -7357,7 +7636,7 @@ fun! s:NetrwSetTgt(bookhist,choice) " supports choosing a bookmark as a target using a qb-generated list let choice= a:choice - 1 if exists("g:netrw_bookmarklist[".choice."]") - call netrw#NetrwMakeTgt(g:netrw_bookmarklist[choice]) + call netrw#MakeTgt(g:netrw_bookmarklist[choice]) else echomsg "Sorry, bookmark#".a:choice." doesn't exist!" endif @@ -7367,7 +7646,7 @@ fun! s:NetrwSetTgt(bookhist,choice) let choice= (a:choice % g:netrw_dirhistmax) + 1 if exists("g:netrw_dirhist_".choice) let histentry = g:netrw_dirhist_{choice} - call netrw#NetrwMakeTgt(histentry) + call netrw#MakeTgt(histentry) else echomsg "Sorry, history#".a:choice." not available!" endif @@ -7381,12 +7660,12 @@ endfun fun! s:NetrwSortStyle(islocal) " call Dfunc("s:NetrwSortStyle(islocal=".a:islocal.") netrw_sort_by<".g:netrw_sort_by.">") keepj call s:NetrwSaveWordPosn() - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name' keepj norm! 0 keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) " call Dret("s:NetrwSortStyle : netrw_sort_by<".g:netrw_sort_by.">") endfun @@ -7454,7 +7733,7 @@ fun! s:NetrwSplit(mode) let netrw_col = virtcol(".") keepj norm! H0 let netrw_hline = line(".") - set ei=all + setl ei=all exe "keepj norm! ".netrw_hline."G0z\<CR>" exe "keepj norm! ".netrw_line."G0".netrw_col."\<bar>" let &ei= eikeep @@ -7466,7 +7745,7 @@ fun! s:NetrwSplit(mode) keepj call s:RestoreWinVars() keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,cursorword)) if &ft == "netrw" - set ei=all + setl ei=all exe "keepj norm! ".netrw_hline."G0z\<CR>" exe "keepj norm! ".netrw_line."G0".netrw_col."\<bar>" let &ei= eikeep @@ -7517,7 +7796,7 @@ fun! s:NetrwTgtMenu() let ebmd= escape(bmd,g:netrw_menu_escape) " show bookmarks for goto menu " call Decho("menu: Targets: ".bmd) - exe 'sil! menu <silent> '.g:NetrwMenuPriority.".19.1.".cnt." ".g:NetrwTopLvlMenu.'Targets.'.ebmd." :call netrw#NetrwMakeTgt('".bmd."')\<cr>" + exe 'sil! menu <silent> '.g:NetrwMenuPriority.".19.1.".cnt." ".g:NetrwTopLvlMenu.'Targets.'.ebmd." :call netrw#MakeTgt('".bmd."')\<cr>" let cnt= cnt + 1 endfor endif @@ -7532,7 +7811,7 @@ fun! s:NetrwTgtMenu() let histentry = g:netrw_dirhist_{histcnt} let ehistentry = escape(histentry,g:netrw_menu_escape) " call Decho("menu: Targets: ".histentry) - exe 'sil! menu <silent> '.g:NetrwMenuPriority.".19.2.".priority." ".g:NetrwTopLvlMenu.'Targets.'.ehistentry." :call netrw#NetrwMakeTgt('".histentry."')\<cr>" + exe 'sil! menu <silent> '.g:NetrwMenuPriority.".19.2.".priority." ".g:NetrwTopLvlMenu.'Targets.'.ehistentry." :call netrw#MakeTgt('".histentry."')\<cr>" endif let histcnt = histcnt + 1 endwhile @@ -7558,30 +7837,30 @@ fun! s:NetrwTreeDir() let b:netrw_curdir= getcwd() endif let treedir = b:netrw_curdir -" call Decho("(s:NetrwTreeDir) set initial treedir<".treedir.">") - let s:treecurpos= netrw#NetrwSavePosn() +" call Decho("set initial treedir<".treedir.">") + let s:treecurpos= netrw#SavePosn() if w:netrw_liststyle == s:TREELIST -" call Decho("(s:NetrwTreeDir) w:netrw_liststyle is TREELIST:") -" call Decho("(s:NetrwTreeDir) line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">") +" call Decho("w:netrw_liststyle is TREELIST:") +" call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">") " extract tree directory if on a line specifying a subdirectory (ie. ends with "/") if getline('.') =~ '/$' " call Decho("extract tree subdirectory from current line") let treedir= substitute(getline('.'),'^\%('.s:treedepthstring.'\)*\([^'.s:treedepthstring.'].\{-}\)$','\1','e') -" call Decho("(s:NetrwTreeDir) treedir<".treedir.">") +" call Decho("treedir<".treedir.">") else -" call Decho("(s:NetrwTreeDir) do not extract tree subdirectory from current line and set treedir to empty") +" call Decho("do not extract tree subdirectory from current line and set treedir to empty") let treedir= "" endif " detect user attempting to close treeroot -" call Decho("(s:NetrwTreeDir) win#".winnr()." buf#".bufnr("%")."<".bufname("%").">") -" call Decho("(s:NetrwTreeDir) getline(".line(".").")<".getline('.').'> '.((getline('.') =~ '^'.s:treedepthstring)? '=~' : '!~').' ^'.s:treedepthstring) +" call Decho("win#".winnr()." buf#".bufnr("%")."<".bufname("%").">") +" call Decho("getline(".line(".").")<".getline('.').'> '.((getline('.') =~ '^'.s:treedepthstring)? '=~' : '!~').' ^'.s:treedepthstring) if getline('.') !~ '^'.s:treedepthstring && getline('.') != '..' " call Decho("user may have attempted to close treeroot") " now force a refresh -" call Decho("(s:NetrwTreeDir) clear buffer<".expand("%")."> with :%d") +" call Decho("clear buffer<".expand("%")."> with :%d") sil! keepj %d " call Dret("s:NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">") return b:netrw_curdir @@ -7589,7 +7868,7 @@ fun! s:NetrwTreeDir() " call Decho("user did not attempt to close treeroot") endif - let treedir= s:NetrwTreePath(w:netrw_treetop) + let treedir = s:NetrwTreePath(w:netrw_treetop) endif " sanity maintenance: keep those //s away... @@ -7658,18 +7937,18 @@ endfun fun! s:NetrwTreeListing(dirname) if w:netrw_liststyle == s:TREELIST " call Dfunc("NetrwTreeListing() bufname<".expand("%").">") -" call Decho("(s:NetrwTreeListing) curdir<".a:dirname.">") -" call Decho("(s:NetrwTreeListing) win#".winnr().": w:netrw_treetop ".(exists("w:netrw_treetop")? "exists" : "doesn't exist")." w:netrw_treedict ".(exists("w:netrw_treedict")? "exists" : "doesn't exit")) -" call Decho("(s:NetrwTreeListing) g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") +" call Decho("curdir<".a:dirname.">") +" call Decho("win#".winnr().": w:netrw_treetop ".(exists("w:netrw_treetop")? "exists" : "doesn't exist")." w:netrw_treedict ".(exists("w:netrw_treedict")? "exists" : "doesn't exit")) +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") " update the treetop -" call Decho("(s:NetrwTreeListing) update the treetop") +" call Decho("update the treetop") if !exists("w:netrw_treetop") let w:netrw_treetop= a:dirname -" call Decho("(s:NetrwTreeListing) w:netrw_treetop<".w:netrw_treetop."> (reusing)") +" call Decho("w:netrw_treetop<".w:netrw_treetop."> (reusing)") elseif (w:netrw_treetop =~ ('^'.a:dirname) && s:Strlen(a:dirname) < s:Strlen(w:netrw_treetop)) || a:dirname !~ ('^'.w:netrw_treetop) let w:netrw_treetop= a:dirname -" call Decho("(s:NetrwTreeListing) w:netrw_treetop<".w:netrw_treetop."> (went up)") +" call Decho("w:netrw_treetop<".w:netrw_treetop."> (went up)") endif " insure that we have at least an empty treedict @@ -7678,11 +7957,11 @@ fun! s:NetrwTreeListing(dirname) endif " update the directory listing for the current directory -" call Decho("(s:NetrwTreeListing) updating dictionary with ".a:dirname.":[..directory listing..]") -" call Decho("(s:NetrwTreeListing) w:netrw_bannercnt=".w:netrw_bannercnt." line($)=".line("$")) +" call Decho("updating dictionary with ".a:dirname.":[..directory listing..]") +" call Decho("w:netrw_bannercnt=".w:netrw_bannercnt." line($)=".line("$")) exe "sil! keepj ".w:netrw_bannercnt.',$g@^\.\.\=/$@d' let w:netrw_treedict[a:dirname]= getline(w:netrw_bannercnt,line("$")) -" call Decho("(s:NetrwTreeListing) w:treedict[".a:dirname."]= ".string(w:netrw_treedict[a:dirname])) +" call Decho("w:treedict[".a:dirname."]= ".string(w:netrw_treedict[a:dirname])) exe "sil! keepj ".w:netrw_bannercnt.",$d" " if past banner, record word @@ -7691,8 +7970,8 @@ fun! s:NetrwTreeListing(dirname) else let fname= "" endif -" call Decho("(s:NetrwTreeListing) fname<".fname.">") -" call Decho("(s:NetrwTreeListing) g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") +" call Decho("fname<".fname.">") +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") " display from treetop on down keepj call s:NetrwTreeDisplay(w:netrw_treetop,"") @@ -7700,7 +7979,7 @@ fun! s:NetrwTreeListing(dirname) " remove any blank line remaining as line#1 (happens in treelisting mode with banner suppressed) while getline(1) =~ '^\s*$' && byte2line(1) > 0 -" call Decho("(s:PerformListing) deleting blank line") +" call Decho("deleting blank line") 1d endwhile @@ -7712,6 +7991,44 @@ fun! s:NetrwTreeListing(dirname) endfun " --------------------------------------------------------------------- +" s:NetrwTreePath: returns path to current file in tree listing {{{2 +" Normally, treetop is w:netrw_treetop, but a +" user of the function ( netrw#SetTreetop() ) +" wipes that out prior to calling this function +fun! s:NetrwTreePath(treetop) +" call Dfunc("s:NetrwTreePath() line#".line(".")."<".getline(".").">") + let depth = substitute(getline('.'),'^\(\%('.s:treedepthstring.'\)*\)[^'.s:treedepthstring.'].\{-}$','\1','e') +" call Decho("(s:NetrwTreePath) depth<".depth."> 1st subst") + let depth = substitute(depth,'^'.s:treedepthstring,'','') +" call Decho("(s:NetrwTreePath) depth<".depth."> 2nd subst (first depth removed)") + if getline('.') =~ '/$' +" call Decho("extract tree directory from current line") + let treedir= substitute(getline('.'),'^\%('.s:treedepthstring.'\)*\([^'.s:treedepthstring.'].\{-}\)$','\1','e') +" call Decho("(s:NetrwTreePath) treedir<".treedir.">") + else +" call Decho("(s:NetrwTreePath) do not extract tree directory from current line and set treedir to empty") + let treedir= "" + endif + " construct treedir by searching backwards at correct depth +" call Decho("(s:NetrwTreePath) construct treedir by searching backwards for correct depth") +" call Decho("(s:NetrwTreePath) initial treedir<".treedir."> depth<".depth.">") + while depth != "" && search('^'.depth.'[^'.s:treedepthstring.'].\{-}/$','bW') + let dirname= substitute(getline('.'),'^\('.s:treedepthstring.'\)*','','e') + let treedir= dirname.treedir + let depth = substitute(depth,'^'.s:treedepthstring,'','') +" call Decho("(s:NetrwTreePath) constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">") + endwhile + if a:treetop =~ '/$' + let treedir= a:treetop.treedir + else + let treedir= a:treetop.'/'.treedir + endif + let treedir= substitute(treedir,'//$','/','') +" call Dret("s:NetrwTreePath <".treedir.">") + return treedir +endfun + +" --------------------------------------------------------------------- " s:NetrwWideListing: {{{2 fun! s:NetrwWideListing() @@ -7748,7 +8065,9 @@ fun! s:NetrwWideListing() let newcolstart = w:netrw_bannercnt + fpc let newcolend = newcolstart + fpc - 1 " call Decho("bannercnt=".w:netrw_bannercnt." fpl=".w:netrw_fpl." fpc=".fpc." newcol[".newcolstart.",".newcolend."]") - sil! let keepregstar = @* + if has("clipboard") + sil! let keepregstar = @* + endif while line("$") >= newcolstart if newcolend > line("$") | let newcolend= line("$") | endif let newcolqty= newcolend - newcolstart @@ -7761,7 +8080,9 @@ fun! s:NetrwWideListing() exe "sil! keepj ".newcolstart.','.newcolend.'d' exe 'sil! keepj '.w:netrw_bannercnt endwhile - sil! let @*= keepregstar + if has("clipboard") + sil! let @*= keepregstar + endif exe "sil! keepj ".w:netrw_bannercnt.',$s/\s\+$//e' keepj call histdel("/",-1) exe "nmap <buffer> <silent> w /^\\\\|\\s\\s\\zs\\S/\<cr>" @@ -7783,70 +8104,35 @@ fun! s:NetrwWideListing() endfun " --------------------------------------------------------------------- -" s:NetrwTreePath: returns path to current file in tree listing {{{2 -" Normally, treetop is w:netrw_treetop, but a -" user of this function ( netrw#NetrwSetTreetop() ) -" wipes that out prior to calling this function -fun! s:NetrwTreePath(treetop) -" call Dfunc("s:NetrwTreePath()") - let depth = substitute(getline('.'),'^\(\%('.s:treedepthstring.'\)*\)[^'.s:treedepthstring.'].\{-}$','\1','e') - let depth = substitute(depth,'^'.s:treedepthstring,'','') -" call Decho("(s:NetrwTreePath) depth<".depth."> 2nd subst (first depth removed)") - if getline('.') =~ '/$' -" call Decho("extract tree directory from current line") - let treedir= substitute(getline('.'),'^\%('.s:treedepthstring.'\)*\([^'.s:treedepthstring.'].\{-}\)$','\1','e') -" call Decho("(s:NetrwTreePath) treedir<".treedir.">") - else -" call Decho("(s:NetrwTreePath) do not extract tree directory from current line and set treedir to empty") - let treedir= "" - endif - " construct treedir by searching backwards at correct depth -" call Decho("(s:NetrwTreePath) initial treedir<".treedir."> depth<".depth.">") - while depth != "" && search('^'.depth.'[^'.s:treedepthstring.'].\{-}/$','bW') - let dirname= substitute(getline('.'),'^\('.s:treedepthstring.'\)*','','e') - let treedir= dirname.treedir - let depth = substitute(depth,'^'.s:treedepthstring,'','') -" call Decho("(s:NetrwTreePath) constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">") - endwhile - if a:treetop =~ '/$' - let treedir= a:treetop.treedir - else - let treedir= a:treetop.'/'.treedir - endif - let treedir= substitute(treedir,'//$','/','') -" call Dret("s:NetrwTreePath <".treedir.">") - return treedir -endfun - -" --------------------------------------------------------------------- " s:PerformListing: {{{2 fun! s:PerformListing(islocal) " call Dfunc("s:PerformListing(islocal=".a:islocal.") bufnr(%)=".bufnr("%")."<".bufname("%").">") -" call Decho("(s:PerformListing) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (enter)") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (enter)") " set up syntax highlighting {{{3 -" call Decho("(s:PerformListing) set up syntax highlighting") +" call Decho("set up syntax highlighting") if has("syntax") if !exists("g:syntax_on") || !g:syntax_on -" call Decho("(s:PerformListing) but g:syntax_on".(exists("g:syntax_on")? "=".g:syntax_on : "<doesn't exist>")) +" call Decho("but g:syntax_on".(exists("g:syntax_on")? "=".g:syntax_on : "<doesn't exist>")) setl ft= elseif &ft != "netrw" +" call Decho("setl ft=netrw") setl ft=netrw endif endif keepj call s:NetrwSafeOptions() - set noro ma -" call Decho("(s:PerformListing) setl noro ma bh=".&bh) + setl noro ma +" call Decho("setl noro ma bh=".&bh) " if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1 " Decho -" call Decho("(s:PerformListing) (netrw) Processing your browsing request...") +" call Decho("(netrw) Processing your browsing request...") " endif " Decho " call Decho('w:netrw_liststyle='.(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a')) if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") " force a refresh for tree listings -" call Decho("(s:PerformListing) force refresh for treelisting: clear buffer<".expand("%")."> with :%d") +" call Decho("force refresh for treelisting: clear buffer<".expand("%")."> with :%d") sil! keepj %d endif @@ -7855,7 +8141,7 @@ fun! s:PerformListing(islocal) " Set up the banner {{{3 if g:netrw_banner -" call Decho("(s:PerformListing) set up banner") +" call Decho("set up banner") keepj call setline(1,'" ============================================================================') keepj call setline(2,'" Netrw Directory Listing (netrw '.g:loaded_netrw.')') if exists("g:netrw_bannerbackslash") && g:netrw_bannerbackslash @@ -7869,6 +8155,7 @@ fun! s:PerformListing(islocal) keepj 1 let w:netrw_bannercnt= 1 endif +" call Decho("w:netrw_bannercnt=".w:netrw_bannercnt." win#".winnr()) let sortby= g:netrw_sort_by if g:netrw_sort_direction =~ "^r" @@ -7877,28 +8164,28 @@ fun! s:PerformListing(islocal) " Sorted by... {{{3 if g:netrw_banner -" call Decho("(s:PerformListing) handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">") +" call Decho("handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">") if g:netrw_sort_by =~ "^n" -" call Decho("(s:PerformListing) directories will be sorted by name") +" call Decho("directories will be sorted by name") " sorted by name keepj put ='\" Sorted by '.sortby keepj put ='\" Sort sequence: '.g:netrw_sort_sequence let w:netrw_bannercnt= w:netrw_bannercnt + 2 else -" call Decho("(s:PerformListing) directories will be sorted by size or time") +" call Decho("directories will be sorted by size or time") " sorted by size or date keepj put ='\" Sorted by '.sortby let w:netrw_bannercnt= w:netrw_bannercnt + 1 endif exe "sil! keepj ".w:netrw_bannercnt " else " Decho -" call Decho("(s:PerformListing) g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") endif " show copy/move target, if any if g:netrw_banner if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal") -" call Decho("(s:PerformListing) show copy/move target<".s:netrwmftgt.">") +" call Decho("show copy/move target<".s:netrwmftgt.">") keepj put ='' if s:netrwmftgt_islocal sil! keepj call setline(line("."),'" Copy/Move Tgt: '.s:netrwmftgt.' (local)') @@ -7907,14 +8194,14 @@ fun! s:PerformListing(islocal) endif let w:netrw_bannercnt= w:netrw_bannercnt + 1 else -" call Decho("(s:PerformListing) s:netrwmftgt does not exist, don't make Copy/Move Tgt") +" call Decho("s:netrwmftgt does not exist, don't make Copy/Move Tgt") endif exe "sil! keepj ".w:netrw_bannercnt endif " Hiding... -or- Showing... {{{3 if g:netrw_banner -" call Decho("(s:PerformListing) handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)") +" call Decho("handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)") if g:netrw_list_hide != "" && g:netrw_hide if g:netrw_hide == 1 keepj put ='\" Hiding: '.g:netrw_list_hide @@ -7924,51 +8211,62 @@ fun! s:PerformListing(islocal) let w:netrw_bannercnt= w:netrw_bannercnt + 1 endif exe "keepjumps ".w:netrw_bannercnt - keepj put ='\" Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:exec' - keepj put ='\" ============================================================================' + +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") + let quickhelp = g:netrw_quickhelp%len(s:QuickHelp) +" call Decho("quickhelp =".quickhelp) + keepj put ='\" Quick Help: <F1>:help '.s:QuickHelp[quickhelp] +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") + keepj put ='\" ==============================================================================' let w:netrw_bannercnt= w:netrw_bannercnt + 2 " else " Decho -" call Decho("(s:PerformListing) g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") endif " bannercnt should index the line just after the banner if g:netrw_banner let w:netrw_bannercnt= w:netrw_bannercnt + 1 exe "sil! keepj ".w:netrw_bannercnt -" call Decho("(s:PerformListing) w:netrw_bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$")) +" call Decho("w:netrw_bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$")) " else " Decho -" call Decho("(s:PerformListing) g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") endif " get list of files -" call Decho("(s:PerformListing) Get list of files - islocal=".a:islocal) +" call Decho("Get list of files - islocal=".a:islocal) if a:islocal keepj call s:LocalListing() else " remote - keepj call s:NetrwRemoteListing() + keepj let badresult= s:NetrwRemoteListing() + if badresult +" call Decho("w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'n/a')." win#".winnr()." buf#".bufnr("%")."<".bufname("%").">") +" call Dret("s:PerformListing : error detected by NetrwRemoteListing") + return + endif endif -" call Decho("(s:PerformListing) g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)") -" call Decho("(s:PerformListing) g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") " manipulate the directory listing (hide, sort) {{{3 if !exists("w:netrw_bannercnt") let w:netrw_bannercnt= 0 endif +" call Decho("g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)") +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") + if !g:netrw_banner || line("$") >= w:netrw_bannercnt -" call Decho("(s:PerformListing) manipulate directory listing (hide)") -" call Decho("(s:PerformListing) g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">") +" call Decho("manipulate directory listing (hide)") +" call Decho("g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">") if g:netrw_hide && g:netrw_list_hide != "" keepj call s:NetrwListHide() endif if !g:netrw_banner || line("$") >= w:netrw_bannercnt -" call Decho("(s:PerformListing) manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">") +" call Decho("manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">") if g:netrw_sort_by =~ "^n" " sort by name keepj call s:NetrwSetSort() if !g:netrw_banner || w:netrw_bannercnt < line("$") -" call Decho("(s:PerformListing) g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")") +" call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")") if g:netrw_sort_direction =~ 'n' " normal direction sorting exe 'sil keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options @@ -7978,13 +8276,13 @@ fun! s:PerformListing(islocal) endif endif " remove priority pattern prefix -" call Decho("(s:PerformListing) remove priority pattern prefix") +" call Decho("remove priority pattern prefix") exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{3}'.g:netrw_sepchr.'//e' keepj call histdel("/",-1) elseif a:islocal if !g:netrw_banner || w:netrw_bannercnt < line("$") -" call Decho("(s:PerformListing) g:netrw_sort_direction=".g:netrw_sort_direction) +" call Decho("g:netrw_sort_direction=".g:netrw_sort_direction) if g:netrw_sort_direction =~ 'n' " call Decho('exe sil keepjumps '.w:netrw_bannercnt.',$sort') exe 'sil! keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options @@ -8005,50 +8303,50 @@ fun! s:PerformListing(islocal) endif endif endif -" call Decho("(s:PerformListing) g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") " convert to wide/tree listing {{{3 -" call Decho("(s:PerformListing) modify display if wide/tree listing style") -" call Decho("(s:PerformListing) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#1)") +" call Decho("modify display if wide/tree listing style") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#1)") keepj call s:NetrwWideListing() -" call Decho("(s:PerformListing) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#2)") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#2)") keepj call s:NetrwTreeListing(b:netrw_curdir) -" call Decho("(s:PerformListing) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#3)") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#3)") if exists("w:netrw_bannercnt") && (line("$") > w:netrw_bannercnt || !g:netrw_banner) " place cursor on the top-left corner of the file listing -" call Decho("(s:PerformListing) place cursor on top-left corner of file listing") +" call Decho("place cursor on top-left corner of file listing") exe 'sil! keepj '.w:netrw_bannercnt sil! keepj norm! 0 endif " record previous current directory let w:netrw_prvdir= b:netrw_curdir -" call Decho("(s:PerformListing) record netrw_prvdir<".w:netrw_prvdir.">") +" call Decho("record netrw_prvdir<".w:netrw_prvdir.">") " save certain window-oriented variables into buffer-oriented variables {{{3 -" call Decho("(s:PerformListing) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#4)") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#4)") keepj call s:SetBufWinVars() -" call Decho("(s:PerformListing) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#5)") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#5)") keepj call s:NetrwOptionRestore("w:") -" call Decho("(s:PerformListing) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#6)") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#6)") " set display to netrw display settings -" call Decho("(s:PerformListing) set display to netrw display settings (".g:netrw_bufsettings.")") +" call Decho("set display to netrw display settings (".g:netrw_bufsettings.")") exe "setl ".g:netrw_bufsettings -" call Decho("(s:PerformListing) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#7)") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#7)") if g:netrw_liststyle == s:LONGLIST -" call Decho("(s:PerformListing) exe setl ts=".(g:netrw_maxfilenamelen+1)) +" call Decho("exe setl ts=".(g:netrw_maxfilenamelen+1)) exe "setl ts=".(g:netrw_maxfilenamelen+1) endif if exists("s:treecurpos") -" call Decho("(s:PerformListing) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#8)") - keepj call netrw#NetrwRestorePosn(s:treecurpos) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#8)") + keepj call netrw#RestorePosn(s:treecurpos) unlet s:treecurpos endif -" call Decho("(s:PerformListing) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (return)") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (return)") " call Dret("s:PerformListing : curpos<".string(getpos(".")).">") endfun @@ -8100,37 +8398,193 @@ endfun " =========================================== " --------------------------------------------------------------------- +" s:NetrwRemoteFtpCmd: unfortunately, not all ftp servers honor options for ls {{{2 +" This function assumes that a long listing will be received. Size, time, +" and reverse sorts will be requested of the server but not otherwise +" enforced here. +fun! s:NetrwRemoteFtpCmd(path,listcmd) +" call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) w:netrw_method=".(exists("w:netrw_method")? w:netrw_method : (exists("b:netrw_method")? b:netrw_method : "???"))) +" call Decho("line($)=".line("$")." w:netrw_bannercnt=".w:netrw_bannercnt) + " sanity check: {{{3 + if !exists("w:netrw_method") + if exists("b:netrw_method") + let w:netrw_method= b:netrw_method + else + call netrw#ErrorMsg(2,"(s:NetrwRemoteFtpCmd) internal netrw error",93) +" call Dret("NetrwRemoteFtpCmd") + return + endif + endif + + " WinXX ftp uses unix style input, so set ff to unix " {{{3 + let ffkeep= &ff + setl ma ff=unix noro +" call Decho("setl ma ff=unix noro") + + " clear off any older non-banner lines " {{{3 + " note that w:netrw_bannercnt indexes the line after the banner +" call Decho('exe sil! keepjumps '.w:netrw_bannercnt.",$d (clear off old non-banner lines)") + exe "sil! keepjumps ".w:netrw_bannercnt.",$d" + + "......................................... + if w:netrw_method == 2 || w:netrw_method == 5 " {{{3 + " ftp + <.netrc>: Method #2 + if a:path != "" + keepj put ='cd \"'.a:path.'\"' + endif + if exists("g:netrw_ftpextracmd") + keepj put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline('.')) + endif + keepj call setline(line("$")+1,a:listcmd) +" exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))' + if exists("g:netrw_port") && g:netrw_port != "" +" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)) + exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1) + else +" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) + exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) + endif + + "......................................... + elseif w:netrw_method == 3 " {{{3 + " ftp + machine,id,passwd,filename: Method #3 + setl ff=unix + if exists("g:netrw_port") && g:netrw_port != "" + keepj put ='open '.g:netrw_machine.' '.g:netrw_port + else + keepj put ='open '.g:netrw_machine + endif + + " handle userid and password + let host= substitute(g:netrw_machine,'\..*$','','') +" call Decho("host<".host.">") + if exists("s:netrw_hup") && exists("s:netrw_hup[host]") + call NetUserPass("ftp:".host) + endif + if exists("g:netrw_uid") && g:netrw_uid != "" + if exists("g:netrw_ftp") && g:netrw_ftp == 1 + keepj put =g:netrw_uid + if exists("s:netrw_passwd") && s:netrw_passwd != "" + keepj put ='\"'.s:netrw_passwd.'\"' + endif + elseif exists("s:netrw_passwd") + keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' + endif + endif + + if a:path != "" + keepj put ='cd \"'.a:path.'\"' + endif + if exists("g:netrw_ftpextracmd") + keepj put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline('.')) + endif + keepj call setline(line("$")+1,a:listcmd) + + " perform ftp: + " -i : turns off interactive prompting from ftp + " -n unix : DON'T use <.netrc>, even though it exists + " -n win32: quit being obnoxious about password + if exists("w:netrw_bannercnt") +" exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))' +" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options) + exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options +" else " Decho +" call Decho("WARNING: w:netrw_bannercnt doesn't exist!") +" g/^./call Decho("SKIPPING ftp#".line(".").": ".getline(".")) " COMBAK + endif + + "......................................... + elseif w:netrw_method == 9 " {{{3 + " sftp username@machine: Method #9 + " s:netrw_sftp_cmd + setl ff=unix + + " restore settings + let &ff= ffkeep +" call Dret("NetrwRemoteFtpCmd") + return + + "......................................... + else " {{{3 + keepj call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . bufname("%") . ">",23) + endif + + " cleanup for Windows " {{{3 + if has("win32") || has("win95") || has("win64") || has("win16") + sil! keepj %s/\r$//e + keepj call histdel("/",-1) + endif + if a:listcmd == "dir" + " infer directory/link based on the file permission string + sil! keepj g/d\%([-r][-w][-x]\)\{3}/keepj s@$@/@e + sil! keepj g/l\%([-r][-w][-x]\)\{3}/keepj s/$/@/e + keepj call histdel("/",-1) + keepj call histdel("/",-1) + if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST + exe "sil! keepj ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e' + keepj call histdel("/",-1) + endif + endif + + " ftp's listing doesn't seem to include ./ or ../ " {{{3 + if !search('^\.\/$\|\s\.\/$','wn') + exe 'keepj '.w:netrw_bannercnt + keepj put ='./' + endif + if !search('^\.\.\/$\|\s\.\.\/$','wn') + exe 'keepj '.w:netrw_bannercnt + keepj put ='../' + endif + + " restore settings " {{{3 + let &ff= ffkeep +" call Dret("NetrwRemoteFtpCmd") +endfun + +" --------------------------------------------------------------------- " s:NetrwRemoteListing: {{{2 fun! s:NetrwRemoteListing() " call Dfunc("s:NetrwRemoteListing() b:netrw_curdir<".b:netrw_curdir.">)") + if !exists("w:netrw_bannercnt") && exists("s:bannercnt") + let w:netrw_bannercnt= s:bannercnt + endif + if !exists("w:netrw_bannercnt") && exists("b:bannercnt") + let w:netrw_bannercnt= s:bannercnt + endif + call s:RemotePathAnalysis(b:netrw_curdir) " sanity check: if exists("b:netrw_method") && b:netrw_method =~ '[235]' " call Decho("b:netrw_method=".b:netrw_method) if !executable("ftp") +" call Decho("ftp is not executable") if !exists("g:netrw_quiet") call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ftp",18) endif call s:NetrwOptionRestore("w:") -" call Dret("s:NetrwRemoteListing") - return +" call Dret("s:NetrwRemoteListing -1") + return -1 endif elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == '' +" call Decho("g:netrw_list_cmd<",(exists("g:netrw_list_cmd")? 'n/a' : "-empty-").">") if !exists("g:netrw_quiet") if g:netrw_list_cmd == "" - keepj call netrw#ErrorMsg(s:ERROR,g:netrw_ssh_cmd." is not executable on your system",47) + keepj call netrw#ErrorMsg(s:ERROR,"your g:netrw_list_cmd is empty; perhaps ".g:netrw_ssh_cmd." is not executable on your system",47) else keepj call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ".g:netrw_list_cmd,19) endif endif keepj call s:NetrwOptionRestore("w:") -" call Dret("s:NetrwRemoteListing") - return +" call Dret("s:NetrwRemoteListing -1") + return -1 endif " (remote handling sanity check) +" call Decho("passed remote listing sanity checks") if exists("b:netrw_method") " call Decho("setting w:netrw_method to b:netrw_method<".b:netrw_method.">") @@ -8151,6 +8605,20 @@ fun! s:NetrwRemoteListing() call s:NetrwRemoteFtpCmd(s:path,listcmd) " exe "sil! keepalt keepj ".w:netrw_bannercnt.',$g/^./call Decho("raw listing: ".getline("."))' + " report on missing file or directory messages + if search('[Nn]o such file or directory\|Failed to change directory') + let mesg= getline(".") + if exists("w:netrw_bannercnt") + setl ma + exe w:netrw_bannercnt.",$d" + setl noma + endif + keepj call s:NetrwOptionRestore("w:") + call netrw#ErrorMsg(s:WARNING,mesg,96) +" call Dret("s:NetrwRemoteListing : -1") + return -1 + endif + if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST " shorten the listing " call Decho("generate short listing") @@ -8223,8 +8691,8 @@ fun! s:NetrwRemoteListing() endif " cleanup - if g:netrw_ftp_browse_reject != "" -" call Decho("(cleanup) exe sil! g/".g:netrw_ssh_browse_reject."/keepjumps d") + if g:netrw_ssh_browse_reject != "" +" call Decho("cleanup: exe sil! g/".g:netrw_ssh_browse_reject."/keepjumps d") exe "sil! g/".g:netrw_ssh_browse_reject."/keepj d" keepj call histdel("/",-1) endif @@ -8271,7 +8739,9 @@ fun! s:NetrwRemoteListing() " if exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$") " Decho " exe "keepj ".w:netrw_bannercnt.',$g/^./call Decho("listing: ".getline("."))' " endif " Decho -" call Dret("s:NetrwRemoteListing") + +" call Dret("s:NetrwRemoteListing 0") + return 0 endfun " --------------------------------------------------------------------- @@ -8279,7 +8749,7 @@ endfun fun! s:NetrwRemoteRm(usrhost,path) range " call Dfunc("s:NetrwRemoteRm(usrhost<".a:usrhost."> path<".a:path.">) virtcol=".virtcol(".")) " call Decho("firstline=".a:firstline." lastline=".a:lastline) - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() let all= 0 if exists("s:netrwmarkfilelist_{bufnr('%')}") @@ -8318,7 +8788,7 @@ fun! s:NetrwRemoteRm(usrhost,path) range " refresh the (remote) directory listing " call Decho("refresh remote directory listing") keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) " call Dret("s:NetrwRemoteRm") endfun @@ -8438,154 +8908,12 @@ fun! s:NetrwRemoteRmFile(path,rmfile,all) endfun " --------------------------------------------------------------------- -" s:NetrwRemoteFtpCmd: unfortunately, not all ftp servers honor options for ls {{{2 -" This function assumes that a long listing will be received. Size, time, -" and reverse sorts will be requested of the server but not otherwise -" enforced here. -fun! s:NetrwRemoteFtpCmd(path,listcmd) -" call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) w:netrw_method=".(exists("w:netrw_method")? w:netrw_method : (exists("b:netrw_method")? b:netrw_method : "???"))) -" call Decho("line($)=".line("$")." w:netrw_bannercnt=".w:netrw_bannercnt) - " sanity check: {{{3 - if !exists("w:netrw_method") - if exists("b:netrw_method") - let w:netrw_method= b:netrw_method - else - call netrw#ErrorMsg(2,"(s:NetrwRemoteFtpCmd) internal netrw error",93) -" call Dret("NetrwRemoteFtpCmd") - return - endif - endif - - " WinXX ftp uses unix style input, so set ff to unix " {{{3 - let ffkeep= &ff - setl ma ff=unix noro -" call Decho("setl ma ff=unix noro") - - " clear off any older non-banner lines " {{{3 - " note that w:netrw_bannercnt indexes the line after the banner -" call Decho('exe sil! keepjumps '.w:netrw_bannercnt.",$d (clear off old non-banner lines)") - exe "sil! keepjumps ".w:netrw_bannercnt.",$d" - - "......................................... - if w:netrw_method == 2 || w:netrw_method == 5 " {{{3 - " ftp + <.netrc>: Method #2 - if a:path != "" - keepj put ='cd \"'.a:path.'\"' - endif - if exists("g:netrw_ftpextracmd") - keepj put =g:netrw_ftpextracmd -" call Decho("filter input: ".getline('.')) - endif - keepj call setline(line("$")+1,a:listcmd) -" exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))' - if exists("g:netrw_port") && g:netrw_port != "" -" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)) - exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1) - else -" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) - exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) - endif - - "......................................... - elseif w:netrw_method == 3 " {{{3 - " ftp + machine,id,passwd,filename: Method #3 - setl ff=unix - if exists("g:netrw_port") && g:netrw_port != "" - keepj put ='open '.g:netrw_machine.' '.g:netrw_port - else - keepj put ='open '.g:netrw_machine - endif - - " handle userid and password - let host= substitute(g:netrw_machine,'\..*$','','') -" call Decho("host<".host.">") - if exists("s:netrw_hup") && exists("s:netrw_hup[host]") - call NetUserPass("ftp:".host) - endif - if exists("g:netrw_uid") && g:netrw_uid != "" - if exists("g:netrw_ftp") && g:netrw_ftp == 1 - keepj put =g:netrw_uid - if exists("s:netrw_passwd") && s:netrw_passwd != "" - keepj put ='\"'.s:netrw_passwd.'\"' - endif - elseif exists("s:netrw_passwd") - keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' - endif - endif - - if a:path != "" - keepj put ='cd \"'.a:path.'\"' - endif - if exists("g:netrw_ftpextracmd") - keepj put =g:netrw_ftpextracmd -" call Decho("filter input: ".getline('.')) - endif - keepj call setline(line("$")+1,a:listcmd) - - " perform ftp: - " -i : turns off interactive prompting from ftp - " -n unix : DON'T use <.netrc>, even though it exists - " -n win32: quit being obnoxious about password -" exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))' -" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options) - exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options - - "......................................... - elseif w:netrw_method == 9 " {{{3 - " sftp username@machine: Method #9 - " s:netrw_sftp_cmd - setl ff=unix -" call Decho("COMBAK: still working on sftp remote listing") - - " restore settings - let &ff= ffkeep -" call Dret("NetrwRemoteFtpCmd") - return - - "......................................... - else " {{{3 - keepj call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . bufname("%") . ">",23) - endif - - " cleanup for Windows " {{{3 - if has("win32") || has("win95") || has("win64") || has("win16") - sil! keepj %s/\r$//e - keepj call histdel("/",-1) - endif - if a:listcmd == "dir" - " infer directory/link based on the file permission string - sil! keepj g/d\%([-r][-w][-x]\)\{3}/keepj s@$@/@ - sil! keepj g/l\%([-r][-w][-x]\)\{3}/keepj s/$/@/ - keepj call histdel("/",-1) - keepj call histdel("/",-1) - if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST - exe "sil! keepj ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e' - keepj call histdel("/",-1) - endif - endif - - " ftp's listing doesn't seem to include ./ or ../ " {{{3 - if !search('^\.\/$\|\s\.\/$','wn') - exe 'keepj '.w:netrw_bannercnt - keepj put ='./' - endif - if !search('^\.\.\/$\|\s\.\.\/$','wn') - exe 'keepj '.w:netrw_bannercnt - keepj put ='../' - endif - - " restore settings " {{{3 - let &ff= ffkeep -" call Dret("NetrwRemoteFtpCmd") -endfun - -" --------------------------------------------------------------------- " s:NetrwRemoteRename: rename a remote file or directory {{{2 fun! s:NetrwRemoteRename(usrhost,path) range " call Dfunc("NetrwRemoteRename(usrhost<".a:usrhost."> path<".a:path.">)") " preparation for removing multiple files/directories - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let ctr = a:firstline let rename_cmd = s:MakeSshCmd(g:netrw_rename_cmd) @@ -8648,7 +8976,7 @@ fun! s:NetrwRemoteRename(usrhost,path) range " refresh the directory keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) " call Dret("NetrwRemoteRename") endfun @@ -8700,9 +9028,9 @@ fun! netrw#FileUrlRead(fname) exe 'sil! bdelete '.plainfname exe 'keepalt file! '.plainfname keepj 1d -" call Decho("(FileUrlRead) setl nomod") +" call Decho("setl nomod") setl nomod -" call Decho("(FileUrlRead) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("netrw#FileUrlRead") exe "sil doau BufReadPost ".fname2396e endfun @@ -8717,36 +9045,41 @@ fun! netrw#LocalBrowseCheck(dirname) " The &ft == "netrw" test was installed because the BufEnter event " would hit when re-entering netrw windows, creating unexpected " refreshes (and would do so in the middle of NetrwSaveOptions(), too) -" call Decho("(LocalBrowseCheck) isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : ""))) -" call Decho("(LocalBrowseCheck) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) -" call Dredir("(LocalBrowseCheck) ls!","ls!") +" call Dfunc("netrw#LocalBrowseCheck(dirname<".a:dirname.">") +" call Decho("isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : ""))) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Dredir("ls!","ls!") + let ykeep= @@ if isdirectory(a:dirname) -" call Decho("(LocalBrowseCheck) is-directory ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$")." ft<".&ft."> g:netrw_fastbrowse=".g:netrw_fastbrowse) - let svposn= netrw#NetrwSavePosn() +" call Decho("is-directory ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$")." ft<".&ft."> g:netrw_fastbrowse=".g:netrw_fastbrowse) + let svposn= netrw#SavePosn() if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname) || g:netrw_fastbrowse <= 1 -" call Decho("(LocalBrowseCheck) case 1 (ft!=netrw)") +" call Decho("case 1 : ft=".&ft) sil! keepj keepalt call s:NetrwBrowse(1,a:dirname) - keepalt call netrw#NetrwRestorePosn(svposn) + keepalt call netrw#RestorePosn(svposn) elseif &ft == "netrw" && line("$") == 1 -" call Decho("(LocalBrowseCheck) case 2 (ft==netrw)") +" call Decho("case 2 (ft≡netrw && line($)≡1)") sil! keepj keepalt call s:NetrwBrowse(1,a:dirname) - keepalt call netrw#NetrwRestorePosn(svposn) + keepalt call netrw#RestorePosn(svposn) elseif exists("s:treeforceredraw") -" call Decho("(LocalBrowseCheck) case 3 (treeforceredraw)") +" call Decho("case 3 (treeforceredraw)") unlet s:treeforceredraw sil! keepj keepalt call s:NetrwBrowse(1,a:dirname) - keepalt call netrw#NetrwRestorePosn(svposn) + keepalt call netrw#RestorePosn(svposn) endif +" call Dret("netrw#LocalBrowseCheck") + return endif " following code wipes out currently unused netrw buffers " IF g:netrw_fastbrowse is zero (ie. slow browsing selected) " AND IF the listing style is not a tree listing if exists("g:netrw_fastbrowse") && g:netrw_fastbrowse == 0 && g:netrw_liststyle != s:TREELIST +" call Decho("wiping out currently unused netrw buffers") let ibuf = 1 let buflast = bufnr("$") while ibuf <= buflast @@ -8757,78 +9090,218 @@ fun! netrw#LocalBrowseCheck(dirname) endwhile endif let @@= ykeep -" call Decho("(LocalBrowseCheck) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " not a directory, ignore it +" call Dret("netrw#LocalBrowseCheck : not a directory, ignoring it; dirname<".a:dirname.">") +endfun + +" --------------------------------------------------------------------- +" s:LocalBrowseRefresh: this function is called after a user has {{{2 +" performed any shell command. The idea is to cause all local-browsing +" buffers to be refreshed after a user has executed some shell command, +" on the chance that s/he removed/created a file/directory with it. +fun! s:LocalBrowseRefresh() +" call Dfunc("s:LocalBrowseRefresh() tabpagenr($)=".tabpagenr("$")) +" call Decho("s:netrw_browselist =".(exists("s:netrw_browselist")? string(s:netrw_browselist) : '<n/a>')) +" call Decho("w:netrw_bannercnt =".(exists("w:netrw_bannercnt")? string(w:netrw_bannercnt) : '<n/a>')) + + " determine which buffers currently reside in a tab + if !exists("s:netrw_browselist") +" call Dret("s:LocalBrowseRefresh : browselist is empty") + return + endif + if !exists("w:netrw_bannercnt") +" call Dret("s:LocalBrowseRefresh : don't refresh when focus not on netrw window") + return + endif + if exists("s:netrw_events") && s:netrw_events == 1 + " s:LocalFastBrowser gets called (indirectly) from a + let s:netrw_events= 2 +" call Dret("s:LocalBrowseRefresh : avoid initial double refresh") + return + endif + let itab = 1 + let buftablist = [] + let ykeep = @@ + while itab <= tabpagenr("$") + let buftablist = buftablist + tabpagebuflist() + let itab = itab + 1 + tabn + endwhile +" call Decho("buftablist".string(buftablist)) +" call Decho("s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">") + " GO through all buffers on netrw_browselist (ie. just local-netrw buffers): + " | refresh any netrw window + " | wipe out any non-displaying netrw buffer + let curwin = winnr() + let ibl = 0 + for ibuf in s:netrw_browselist +" call Decho("bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf)) + if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1 + " wipe out any non-displaying netrw buffer +" call Decho("wiping buf#".ibuf,"<".bufname(ibuf).">") + exe "sil! bd ".fnameescape(ibuf) + call remove(s:netrw_browselist,ibl) +" call Decho("browselist=".string(s:netrw_browselist)) + continue + elseif index(tabpagebuflist(),ibuf) != -1 + " refresh any netrw buffer +" call Decho("refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf)) + exe bufwinnr(ibuf)."wincmd w" + if getline(".") =~ 'Quick Help' + " decrement g:netrw_quickhelp to prevent refresh from changing g:netrw_quickhelp + " (counteracts s:NetrwBrowseChgDir()'s incrementing) + let g:netrw_quickhelp= g:netrw_quickhelp - 1 + endif +" call Decho("#3: quickhelp=".g:netrw_quickhelp) + keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) + endif + let ibl= ibl + 1 + endfor + exe curwin."wincmd w" + let @@= ykeep + +" call Dret("s:LocalBrowseRefresh") +endfun + +" --------------------------------------------------------------------- +" s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2 +" +" g:netrw_ Directory Is +" fastbrowse Local Remote +" slow 0 D D D=Deleting a buffer implies it will not be re-used (slow) +" med 1 D H H=Hiding a buffer implies it may be re-used (fast) +" fast 2 H H +" +" Deleting a buffer means that it will be re-loaded when examined, hence "slow". +" Hiding a buffer means that it will be re-used when examined, hence "fast". +" (re-using a buffer may not be as accurate) +" +" s:netrw_events : doesn't exist, s:LocalFastBrowser() will install autocmds whena med or fast browsing +" =1: autocmds installed, but ignore next FocusGained event to avoid initial double-refresh of listing. +" BufEnter may be first event, then a FocusGained event. Ignore the first FocusGained event. +" If :Explore used: it sets s:netrw_events to 2, so no FocusGained events are ignored. +" =2: autocmds installed (doesn't ignore any FocusGained events) +fun! s:LocalFastBrowser() +" call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse) +" call Decho("s:netrw_events ".(exists("s:netrw_events")? "exists" : 'n/a')) +" call Decho("autocmd: ShellCmdPost ".(exists("#ShellCmdPost")? "installed" : "not installed")) +" call Decho("autocmd: FocusGained ".(exists("#FocusGained")? "installed" : "not installed")) + + " initialize browselist, a list of buffer numbers that the local browser has used + if !exists("s:netrw_browselist") +" call Decho("initialize s:netrw_browselist") + let s:netrw_browselist= [] + endif + + " append current buffer to fastbrowse list + if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1] +" call Decho("appendng current buffer to browselist") + call add(s:netrw_browselist,bufnr("%")) +" call Decho("browselist=".string(s:netrw_browselist)) + endif + + " enable autocmd events to handle refreshing/removing local browser buffers + " If local browse buffer is currently showing: refresh it + " If local browse buffer is currently hidden : wipe it + " g:netrw_fastbrowse=0 : slow speed, never re-use directory listing + " =1 : medium speed, re-use directory listing for remote only + " =2 : fast speed, always re-use directory listing when possible + if g:netrw_fastbrowse <= 1 && !exists("#ShellCmdPost") && !exists("s:netrw_events") + let s:netrw_events= 1 + augroup AuNetrwEvent + au! + if (has("win32") || has("win95") || has("win64") || has("win16")) +" call Decho("installing autocmd: ShellCmdPost") + au ShellCmdPost * call s:LocalBrowseRefresh() + else +" call Decho("installing autocmds: ShellCmdPost FocusGained") + au ShellCmdPost,FocusGained * call s:LocalBrowseRefresh() + endif + augroup END + + " user must have changed fastbrowse to its fast setting, so remove + " the associated autocmd events + elseif g:netrw_fastbrowse > 1 && exists("#ShellCmdPost") && exists("s:netrw_events") +" call Decho("remove AuNetrwEvent autcmd group") + unlet s:netrw_events + augroup AuNetrwEvent + au! + augroup END + augroup! AuNetrwEvent + endif + +" call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">") endfun " --------------------------------------------------------------------- " s:LocalListing: does the job of "ls" for local directories {{{2 fun! s:LocalListing() " call Dfunc("s:LocalListing()") -" call Decho("(LocalListing) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") -" call Decho("(LocalListing) tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) -" if exists("b:netrw_curdir") |call Decho('(LocalListing) b:netrw_curdir<'.b:netrw_curdir.">") |else|call Decho("(LocalListing) b:netrw_curdir doesn't exist") |endif -" if exists("g:netrw_sort_by")|call Decho('(LocalListing) g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("(LocalListing) g:netrw_sort_by doesn't exist")|endif -" call Decho("(s:LocalListing) g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") +" if exists("b:netrw_curdir") |call Decho('b:netrw_curdir<'.b:netrw_curdir.">") |else|call Decho("b:netrw_curdir doesn't exist") |endif +" if exists("g:netrw_sort_by")|call Decho('g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("g:netrw_sort_by doesn't exist")|endif +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") " get the list of files contained in the current directory let dirname = b:netrw_curdir let dirnamelen = strlen(b:netrw_curdir) let filelist = glob(s:ComposePath(dirname,"*"),0,1) let filelist = filelist + glob(s:ComposePath(dirname,".*"),0,1) -" call Decho("(LocalListing) filelist=".filelist) +" call Decho("filelist=".filelist) if g:netrw_cygwin == 0 && (has("win32") || has("win95") || has("win64") || has("win16")) -" call Decho("(LocalListing) filelist=".string(filelist)) +" call Decho("filelist=".string(filelist)) elseif index(filelist,'..') == -1 && b:netrw_curdir !~ '/' " include ../ in the glob() entry if its missing -" call Decho("(LocalListing) forcibly including on \"..\"") +" call Decho("forcibly including on \"..\"") let filelist= filelist+[s:ComposePath(b:netrw_curdir,"../")] -" call Decho("(LocalListing) filelist=".string(filelist)) +" call Decho("filelist=".string(filelist)) endif -" call Decho("(LocalListing) (before while) dirname<".dirname.">") -" call Decho("(LocalListing) (before while) dirnamelen<".dirnamelen.">") -" call Decho("(LocalListing) (before while) filelist=".string(filelist)) +" call Decho("before while: dirname<".dirname.">") +" call Decho("before while: dirnamelen<".dirnamelen.">") +" call Decho("before while: filelist=".string(filelist)) if get(g:, 'netrw_dynamic_maxfilenamelen', 0) let filelistcopy = map(deepcopy(filelist),'fnamemodify(v:val, ":t")') let g:netrw_maxfilenamelen = max(map(filelistcopy,'len(v:val)')) + 1 -" call Decho("(LocalListing) dynamic_maxfilenamelen: filenames =".string(filelistcopy)) -" call Decho("(LocalListing) dynamic_maxfilenamelen: g:netrw_maxfilenamelen=".g:netrw_maxfilenamelen) +" call Decho("dynamic_maxfilenamelen: filenames =".string(filelistcopy)) +" call Decho("dynamic_maxfilenamelen: g:netrw_maxfilenamelen=".g:netrw_maxfilenamelen) endif -" call Decho("(s:LocalListing) g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") for filename in filelist -" call Decho("(LocalListing) ") -" call Decho("(LocalListing) for filename in filelist: filename<".filename.">") +" call Decho(" ") +" call Decho("for filename in filelist: filename<".filename.">") if getftype(filename) == "link" " indicate a symbolic link -" call Decho("(LocalListing) indicate <".filename."> is a symbolic link with trailing @") +" call Decho("indicate <".filename."> is a symbolic link with trailing @") let pfile= filename."@" elseif getftype(filename) == "socket" " indicate a socket -" call Decho("(LocalListing) indicate <".filename."> is a socket with trailing =") +" call Decho("indicate <".filename."> is a socket with trailing =") let pfile= filename."=" elseif getftype(filename) == "fifo" " indicate a fifo -" call Decho("(LocalListing) indicate <".filename."> is a fifo with trailing |") +" call Decho("indicate <".filename."> is a fifo with trailing |") let pfile= filename."|" elseif isdirectory(filename) " indicate a directory -" call Decho("(LocalListing) indicate <".filename."> is a directory with trailing /") +" call Decho("indicate <".filename."> is a directory with trailing /") let pfile= filename."/" elseif exists("b:netrw_curdir") && b:netrw_curdir !~ '^.*://' && !isdirectory(filename) if (has("win32") || has("win95") || has("win64") || has("win16")) if filename =~ '\.[eE][xX][eE]$' || filename =~ '\.[cC][oO][mM]$' || filename =~ '\.[bB][aA][tT]$' " indicate an executable -" call Decho("(LocalListing) indicate <".filename."> is executable with trailing *") +" call Decho("indicate <".filename."> is executable with trailing *") let pfile= filename."*" else " normal file @@ -8836,7 +9309,7 @@ fun! s:LocalListing() endif elseif executable(filename) " indicate an executable -" call Decho("(LocalListing) indicate <".filename."> is executable with trailing *") +" call Decho("indicate <".filename."> is executable with trailing *") let pfile= filename."*" else " normal file @@ -8847,45 +9320,45 @@ fun! s:LocalListing() " normal file let pfile= filename endif -" call Decho("(LocalListing) pfile<".pfile."> (after *@/ appending)") +" call Decho("pfile<".pfile."> (after *@/ appending)") if pfile =~ '//$' let pfile= substitute(pfile,'//$','/','e') -" call Decho("(LocalListing) change // to /: pfile<".pfile.">") +" call Decho("change // to /: pfile<".pfile.">") endif let pfile= strpart(pfile,dirnamelen) let pfile= substitute(pfile,'^[/\\]','','e') -" call Decho("(LocalListing) filename<".filename.">") -" call Decho("(LocalListing) pfile <".pfile.">") +" call Decho("filename<".filename.">") +" call Decho("pfile <".pfile.">") if w:netrw_liststyle == s:LONGLIST let sz = getfsize(filename) let fsz = strpart(" ",1,15-strlen(sz)).sz let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename)) -" call Decho("(LocalListing) sz=".sz." fsz=".fsz) +" call Decho("sz=".sz." fsz=".fsz) endif if g:netrw_sort_by =~ "^t" " sort by time (handles time up to 1 quintillion seconds, US) -" call Decho("(LocalListing) getftime(".filename.")=".getftime(filename)) +" call Decho("getftime(".filename.")=".getftime(filename)) let t = getftime(filename) let ft = strpart("000000000000000000",1,18-strlen(t)).t -" call Decho("(LocalListing) exe keepjumps put ='".ft.'/'.filename."'") +" call Decho("exe keepjumps put ='".ft.'/'.filename."'") let ftpfile= ft.'/'.pfile sil! keepj put=ftpfile elseif g:netrw_sort_by =~ "^s" " sort by size (handles file sizes up to 1 quintillion bytes, US) -" call Decho("(LocalListing) getfsize(".filename.")=".getfsize(filename)) +" call Decho("getfsize(".filename.")=".getfsize(filename)) let sz = getfsize(filename) let fsz = strpart("000000000000000000",1,18-strlen(sz)).sz -" call Decho("(LocalListing) exe keepj put ='".fsz.'/'.filename."'") +" call Decho("exe keepj put ='".fsz.'/'.filename."'") let fszpfile= fsz.'/'.pfile sil! keepj put =fszpfile else " sort by name -" call Decho("(LocalListing) exe keepjumps put ='".pfile."'") +" call Decho("exe keepjumps put ='".pfile."'") sil! keepj put=pfile endif endfor @@ -8894,138 +9367,13 @@ fun! s:LocalListing() sil! keepj g/^$/d sil! keepj %s/\r$//e call histdel("/",-1) -" call Decho("(LocalListing) exe setl ts=".(g:netrw_maxfilenamelen+1)) +" call Decho("exe setl ts=".(g:netrw_maxfilenamelen+1)) exe "setl ts=".(g:netrw_maxfilenamelen+1) " call Dret("s:LocalListing") endfun " --------------------------------------------------------------------- -" s:LocalBrowseShellCmdRefresh: this function is called after a user has {{{2 -" performed any shell command. The idea is to cause all local-browsing -" buffers to be refreshed after a user has executed some shell command, -" on the chance that s/he removed/created a file/directory with it. -fun! s:LocalBrowseShellCmdRefresh() -" call Dfunc("LocalBrowseShellCmdRefresh() browselist=".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "empty")." ".tabpagenr("$")." tabs") - " determine which buffers currently reside in a tab - if !exists("s:netrw_browselist") -" call Dret("LocalBrowseShellCmdRefresh : browselist is empty") - return - endif - if !exists("w:netrw_bannercnt") -" call Dret("LocalBrowseShellCmdRefresh : don't refresh when focus not on netrw window") - return - endif - if exists("s:locbrowseshellcmd") - if s:locbrowseshellcmd - let s:locbrowseshellcmd= 0 -" call Dret("LocalBrowseShellCmdRefresh : NetrwBrowse itself caused the refresh") - return - endif - let s:locbrowseshellcmd= 0 - endif - let itab = 1 - let buftablist = [] - let ykeep = @@ - while itab <= tabpagenr("$") - let buftablist = buftablist + tabpagebuflist() - let itab = itab + 1 - tabn - endwhile -" call Decho("(LocalBrowseShellCmdRefresh) buftablist".string(buftablist)) -" call Decho("(LocalBrowseShellCmdRefresh) s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">") - " GO through all buffers on netrw_browselist (ie. just local-netrw buffers): - " | refresh any netrw window - " | wipe out any non-displaying netrw buffer - let curwin = winnr() - let ibl = 0 - for ibuf in s:netrw_browselist -" call Decho("(LocalBrowseShellCmdRefresh) bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf)) - if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1 - " wipe out any non-displaying netrw buffer -" call Decho("(LocalBrowseShellCmdRefresh) wiping buf#".ibuf,"<".bufname(ibuf).">") - exe "sil! bd ".fnameescape(ibuf) - call remove(s:netrw_browselist,ibl) -" call Decho("(LocalBrowseShellCmdRefresh) browselist=".string(s:netrw_browselist)) - continue - elseif index(tabpagebuflist(),ibuf) != -1 - " refresh any netrw buffer -" call Decho("(LocalBrowseShellCmdRefresh) refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf)) - exe bufwinnr(ibuf)."wincmd w" - keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) - endif - let ibl= ibl + 1 - endfor - exe curwin."wincmd w" - let @@= ykeep - -" call Dret("LocalBrowseShellCmdRefresh") -endfun - -" --------------------------------------------------------------------- -" s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2 -" -" g:netrw_ Directory Is -" fastbrowse Local Remote -" slow 0 D D D=Deleting a buffer implies it will not be re-used (slow) -" med 1 D H H=Hiding a buffer implies it may be re-used (fast) -" fast 2 H H -" -" Deleting a buffer means that it will be re-loaded when examined, hence "slow". -" Hiding a buffer means that it will be re-used when examined, hence "fast". -" (re-using a buffer may not be as accurate) -fun! s:LocalFastBrowser() -" call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse." s:netrw_browser_shellcmd ".(exists("s:netrw_browser_shellcmd")? "exists" : "does not exist")) - - " initialize browselist, a list of buffer numbers that the local browser has used - if !exists("s:netrw_browselist") -" call Decho("(LocalFastBrowser) initialize s:netrw_browselist") - let s:netrw_browselist= [] - endif - - " append current buffer to fastbrowse list - if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1] -" call Decho("(LocalFastBrowser) appendng current buffer to browselist") - call add(s:netrw_browselist,bufnr("%")) -" call Decho("(LocalFastBrowser) browselist=".string(s:netrw_browselist)) - endif - - " enable autocmd events to handle refreshing/removing local browser buffers - " If local browse buffer is currently showing: refresh it - " If local browse buffer is currently hidden : wipe it - " g:netrw_fastbrowse=0 : slow speed, never re-use directory listing - " =1 : medium speed, re-use directory listing for remote only - " =2 : fast speed, always re-use directory listing when possible - if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1 -" call Decho("(LocalFastBrowser) setting up local-browser shell command refresh") - let s:netrw_browser_shellcmd= 1 - augroup AuNetrwShellCmd - au! - if (has("win32") || has("win95") || has("win64") || has("win16")) -" call Decho("(LocalFastBrowser) autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()") - au ShellCmdPost * call s:LocalBrowseShellCmdRefresh() - else - au ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh() -" call Decho("(LocalFastBrowser) autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()") - endif - augroup END - endif - - " user must have changed fastbrowse to its fast setting, so remove - " the associated autocmd events - if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd") -" call Decho("(LocalFastBrowser) remove AuNetrwShellCmd autcmd group") - unlet s:netrw_browser_shellcmd - augroup AuNetrwShellCmd - au! - augroup END - augroup! AuNetrwShellCmd - endif - -" call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">") -endfun - -" --------------------------------------------------------------------- " s:NetrwLocalExecute: uses system() to execute command under cursor ("X" command support) {{{2 fun! s:NetrwLocalExecute(cmd) " call Dfunc("s:NetrwLocalExecute(cmd<".a:cmd.">)") @@ -9041,7 +9389,7 @@ fun! s:NetrwLocalExecute(cmd) let optargs= input(":!".a:cmd,"","file") " call Decho("optargs<".optargs.">") let result= system(a:cmd.optargs) -" call Decho(result) +" call Decho("result) " strip any ansi escape sequences off let result = substitute(result,"\e\\[[0-9;]*m","","g") @@ -9061,7 +9409,7 @@ fun! s:NetrwLocalRename(path) range " preparation for removing multiple files/directories let ykeep = @@ let ctr = a:firstline - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() " rename files given by the markfilelist if exists("s:netrwmarkfilelist_{bufnr('%')}") @@ -9120,7 +9468,7 @@ fun! s:NetrwLocalRename(path) range " refresh the directory " call Decho("refresh the directory listing") keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) let @@= ykeep " call Dret("NetrwLocalRename") @@ -9136,7 +9484,7 @@ fun! s:NetrwLocalRm(path) range let ykeep = @@ let ret = 0 let all = 0 - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() if exists("s:netrwmarkfilelist_{bufnr('%')}") " remove all marked files @@ -9183,7 +9531,7 @@ fun! s:NetrwLocalRm(path) range " call Decho("bufname<".bufname("%").">") if bufname("%") != "NetrwMessage" keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) endif let @@= ykeep @@ -9279,31 +9627,26 @@ endfun " Support Functions: {{{1 " --------------------------------------------------------------------- -" netrw#WinPath: tries to insure that the path is windows-acceptable, whether cygwin is used or not {{{2 -fun! netrw#WinPath(path) -" call Dfunc("netrw#WinPath(path<".a:path.">)") - if (!g:netrw_cygwin || &shell !~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$') && (has("win32") || has("win95") || has("win64") || has("win16")) - " remove cygdrive prefix, if present - let path = substitute(a:path,g:netrw_cygdrive.'/\(.\)','\1:','') - " remove trailing slash (Win95) - let path = substitute(path, '\(\\\|/\)$', '', 'g') - " remove escaped spaces - let path = substitute(path, '\ ', ' ', 'g') - " convert slashes to backslashes - let path = substitute(path, '/', '\', 'g') - else - let path= a:path - endif -" call Dret("netrw#WinPath <".path.">") - return path +" netrw#Access: intended to provide access to variable values for netrw's test suite {{{2 +" 0: marked file list of current buffer +" 1: marked file target +fun! netrw#Access(ilist) + if a:ilist == 0 + if exists("s:netrwmarkfilelist_".bufnr('%')) + return s:netrwmarkfilelist_{bufnr('%')} + else + return "no-list-buf#".bufnr('%') + endif + elseif a:ilist == 1 + return s:netrwmftgt endfun -" --------------------------------------------------------------------- -" netrw#NetrwRestorePosn: restores the cursor and file position as saved by NetrwSavePosn() {{{2 -fun! netrw#NetrwRestorePosn(...) -" call Dfunc("netrw#NetrwRestorePosn() a:0=".a:0." winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : -1)." line=".(exists("w:netrw_line")? w:netrw_line : -1)." col=".(exists("w:netrw_col")? w:netrw_col : -1)." hline=".(exists("w:netrw_hline")? w:netrw_hline : -1)) +" ------------------------------------------------------------------------ +" netrw#RestorePosn: restores the cursor and file position as saved by NetrwSavePosn() {{{2 +fun! netrw#RestorePosn(...) +" call Dfunc("netrw#RestorePosn() a:0=".a:0." winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : -1)." line=".(exists("w:netrw_line")? w:netrw_line : -1)." col=".(exists("w:netrw_col")? w:netrw_col : -1)." hline=".(exists("w:netrw_hline")? w:netrw_hline : -1)) let eikeep= &ei - set ei=all + setl ei=all if expand("%") == "NetrwMessage" if exists("s:winBeforeErr") exe s:winBeforeErr."wincmd w" @@ -9316,7 +9659,7 @@ fun! netrw#NetrwRestorePosn(...) " restore window if exists("w:netrw_winnr") -" call Decho("(NetrwRestorePosn) restore window: exe sil! ".w:netrw_winnr."wincmd w") +" call Decho("restore window: exe sil! ".w:netrw_winnr."wincmd w") exe "sil! ".w:netrw_winnr."wincmd w" endif if v:shell_error == 0 @@ -9327,29 +9670,38 @@ fun! netrw#NetrwRestorePosn(...) " restore top-of-screen line if exists("w:netrw_hline") -" call Decho("(NetrwRestorePosn) restore topofscreen: exe keepj norm! ".w:netrw_hline."G0z") +" call Decho("restore topofscreen: exe keepj norm! ".w:netrw_hline."G0z") exe "keepj norm! ".w:netrw_hline."G0z\<CR>" endif " restore position if exists("w:netrw_line") && exists("w:netrw_col") -" call Decho("(NetrwRestorePosn) restore posn: exe keepj norm! ".w:netrw_line."G0".w:netrw_col."|") +" call Decho("restore posn: exe keepj norm! ".w:netrw_line."G0".w:netrw_col."|") exe "keepj norm! ".w:netrw_line."G0".w:netrw_col."\<bar>" endif let &ei= eikeep -" call Dret("netrw#NetrwRestorePosn : line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol()) +" call Dret("netrw#RestorePosn : line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol()) +endfun + +" --------------------------------------------------------------------- +" netrw#RFC2396: converts %xx into characters {{{2 +fun! netrw#RFC2396(fname) +" call Dfunc("netrw#RFC2396(fname<".a:fname.">)") + let fname = escape(substitute(a:fname,'%\(\x\x\)','\=nr2char("0x".submatch(1))','ge')," \t") +" call Dret("netrw#RFC2396 ".fname) + return fname endfun " --------------------------------------------------------------------- -" netrw#NetrwSavePosn: saves position of cursor on screen {{{2 -fun! netrw#NetrwSavePosn() -" call Dfunc("netrw#NetrwSavePosn() line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol()) +" netrw#SavePosn: saves position of cursor on screen {{{2 +fun! netrw#SavePosn() +" call Dfunc("netrw#SavePosn() line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol()) " Save current line and column let w:netrw_winnr= winnr() let w:netrw_line = line(".") let w:netrw_col = virtcol(".") -" call Decho("(NetrwSavePosn) currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col) +" call Decho("currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col) " Save top-of-screen line keepj norm! H0 @@ -9358,33 +9710,29 @@ fun! netrw#NetrwSavePosn() " set up string holding position parameters let ret = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline - keepj call netrw#NetrwRestorePosn() -" call Dret("netrw#NetrwSavePosn : winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : "n/a")." line=".(exists("w:netrw_line")? w:netrw_line : "n/a")." col=".(exists("w:netrw_col")? w:netrw_col : "n/a")." hline=".(exists("w:netrw_hline")? w:netrw_hline : "n/a")) + keepj call netrw#RestorePosn() +" call Dret("netrw#SavePosn : winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : "n/a")." line=".(exists("w:netrw_line")? w:netrw_line : "n/a")." col=".(exists("w:netrw_col")? w:netrw_col : "n/a")." hline=".(exists("w:netrw_hline")? w:netrw_hline : "n/a")) return ret endfun " --------------------------------------------------------------------- -" netrw#NetrwAccess: intended to provide access to variable values for netrw's test suite {{{2 -" 0: marked file list of current buffer -" 1: marked file target -fun! netrw#NetrwAccess(ilist) - if a:ilist == 0 - if exists("s:netrwmarkfilelist_".bufnr('%')) - return s:netrwmarkfilelist_{bufnr('%')} - else - return "no-list-buf#".bufnr('%') - endif - elseif a:ilist == 1 - return s:netrwmftgt -endfun - -" ------------------------------------------------------------------------ -" netrw#RFC2396: converts %xx into characters {{{2 -fun! netrw#RFC2396(fname) -" call Dfunc("netrw#RFC2396(fname<".a:fname.">)") - let fname = escape(substitute(a:fname,'%\(\x\x\)','\=nr2char("0x".submatch(1))','ge')," \t") -" call Dret("netrw#RFC2396 ".fname) - return fname +" netrw#WinPath: tries to insure that the path is windows-acceptable, whether cygwin is used or not {{{2 +fun! netrw#WinPath(path) +" call Dfunc("netrw#WinPath(path<".a:path.">)") + if (!g:netrw_cygwin || &shell !~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$') && (has("win32") || has("win95") || has("win64") || has("win16")) + " remove cygdrive prefix, if present + let path = substitute(a:path,g:netrw_cygdrive.'/\(.\)','\1:','') + " remove trailing slash (Win95) + let path = substitute(path, '\(\\\|/\)$', '', 'g') + " remove escaped spaces + let path = substitute(path, '\ ', ' ', 'g') + " convert slashes to backslashes + let path = substitute(path, '/', '\', 'g') + else + let path= a:path + endif +" call Dret("netrw#WinPath <".path.">") + return path endfun " --------------------------------------------------------------------- @@ -9477,7 +9825,7 @@ fun! s:GetTempfile(fname) " sanity check -- does the temporary file's directory exist? if !isdirectory(substitute(tmpfile,'[^/]\+$','','e')) -" call Decho("(GetTempfile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") keepj call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2) " call Dret("s:GetTempfile getcwd<".getcwd().">") return "" @@ -9525,7 +9873,7 @@ fun! s:GetTempfile(fname) endif endif -" call Decho("(GetTempFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("s:GetTempfile <".tmpfile.">") return tmpfile endfun @@ -9678,10 +10026,10 @@ endfun " s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2 fun! s:NetrwEnew(...) " call Dfunc("s:NetrwEnew() a:0=".a:0." bufnr($)=".bufnr("$")) -" call Decho("(s:NetrwEnew) curdir<".((a:0>0)? a:1 : "")."> buf#".bufnr("%")."<".bufname("%").">") +" call Decho("curdir<".((a:0>0)? a:1 : "")."> buf#".bufnr("%")."<".bufname("%").">") " grab a function-local-variable copy of buffer variables -" call Decho("(s:NetrwEnew) make function-local copy of netrw variables") +" call Decho("make function-local copy of netrw variables") if exists("b:netrw_bannercnt") |let netrw_bannercnt = b:netrw_bannercnt |endif if exists("b:netrw_browser_active") |let netrw_browser_active = b:netrw_browser_active |endif if exists("b:netrw_cpf") |let netrw_cpf = b:netrw_cpf |endif @@ -9700,15 +10048,15 @@ fun! s:NetrwEnew(...) if exists("b:netrw_prvdir") |let netrw_prvdir = b:netrw_prvdir |endif keepj call s:NetrwOptionRestore("w:") -" call Decho("(s:NetrwEnew) generate a buffer with keepjumps keepalt enew!") +" call Decho("generate a buffer with keepjumps keepalt enew!") let netrw_keepdiff= &l:diff keepj keepalt enew! let &l:diff= netrw_keepdiff -" call Decho("(s:NetrwEnew) bufnr($)=".bufnr("$")." winnr($)=".winnr("$")) +" call Decho("bufnr($)=".bufnr("$")." winnr($)=".winnr("$")) keepj call s:NetrwOptionSave("w:") " copy function-local-variables to buffer variable equivalents -" call Decho("(s:NetrwEnew) copy function-local variables back to buffer netrw variables") +" call Decho("copy function-local variables back to buffer netrw variables") if exists("netrw_bannercnt") |let b:netrw_bannercnt = netrw_bannercnt |endif if exists("netrw_browser_active") |let b:netrw_browser_active = netrw_browser_active |endif if exists("netrw_cpf") |let b:netrw_cpf = netrw_cpf |endif @@ -9731,7 +10079,7 @@ fun! s:NetrwEnew(...) if b:netrw_curdir =~ '/$' if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST file NetrwTreeListing - set bt=nowrite noswf bh=hide + setl bt=nowrite noswf bh=hide nno <silent> <buffer> [ :sil call <SID>TreeListMove('[')<cr> nno <silent> <buffer> ] :sil call <SID>TreeListMove(']')<cr> else @@ -9771,6 +10119,43 @@ fun! s:NetrwInsureWinVars() " call Dret("s:NetrwInsureWinVars win#".winnr()) endfun +" --------------------------------------------------------------------- +" s:NetrwLcd: handles changing the (local) directory {{{2 +fun! s:NetrwLcd(newdir) +" call Dfunc("s:NetrwLcd(newdir<".a:newdir.">)") + + try + exe 'keepj sil lcd '.fnameescape(a:newdir) + catch /^Vim\%((\a\+)\)\=:E344/ + " Vim's lcd fails with E344 when attempting to go above the 'root' of a Windows share. + " Therefore, detect if a Windows share is present, and if E344 occurs, just settle at + " 'root' (ie. '\'). The share name may start with either backslashes ('\\Foo') or + " forward slashes ('//Foo'), depending on whether backslashes have been converted to + " forward slashes by earlier code; so check for both. + if (has("win32") || has("win95") || has("win64") || has("win16")) && !g:netrw_cygwin + if a:newdir =~ '^\\\\\w\+' || a:newdir =~ '^//\w\+' + let dirname = '\' + exe 'keepj sil lcd '.fnameescape(dirname) + endif + endif + catch /^Vim\%((\a\+)\)\=:E472/ + call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".a:newdir."> (permissions?)",61) + if exists("w:netrw_prvdir") + let a:newdir= w:netrw_prvdir + else + call s:NetrwOptionRestore("w:") +" call Decho("setl noma nomod nowrap") + setl noma nomod nowrap +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") + let a:newdir= dirname +" call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">") + return + endif + endtry + +" call Dret("s:NetrwLcd") +endfun + " ------------------------------------------------------------------------ " s:NetrwSaveWordPosn: used to keep cursor on same word after refresh, {{{2 " changed sorting, etc. Also see s:NetrwRestoreWordPosn(). @@ -9809,6 +10194,7 @@ endfun fun! s:RemotePathAnalysis(dirname) " call Dfunc("s:RemotePathAnalysis(a:dirname<".a:dirname.">)") + " method :// user @ machine :port /path let dirpat = '^\(\w\{-}\)://\(\(\w\+\)@\)\=\([^/:#]\+\)\%([:#]\(\d\+\)\)\=/\(.*\)$' let s:method = substitute(a:dirname,dirpat,'\1','') let s:user = substitute(a:dirname,dirpat,'\3','') @@ -9816,6 +10202,11 @@ fun! s:RemotePathAnalysis(dirname) let s:port = substitute(a:dirname,dirpat,'\5','') let s:path = substitute(a:dirname,dirpat,'\6','') let s:fname = substitute(a:dirname,'^.*/\ze.','','') + if s:machine =~ '@' + let dirpat = '^\(.*\)@\(.\{-}\)$' + let s:user = s:user.'@'.substitute(s:machine,dirpat,'\1','') + let s:machine = substitute(s:machine,dirpat,'\2','') + endif " call Decho("set up s:method <".s:method .">") " call Decho("set up s:user <".s:user .">") @@ -9892,31 +10283,46 @@ fun! s:NetrwRexplore(islocal,dirname) return endif " call Dfunc("s:NetrwRexplore() w:netrw_rexlocal=".w:netrw_rexlocal." w:netrw_rexdir<".w:netrw_rexdir.">") +" call Decho("ft=".&ft." win#".winnr()." w:netrw_rexfile<".(exists("w:netrw_rexfile")? w:netrw_rexfile : 'n/a').">") + + if &ft == "netrw" && exists("w:netrw_rexfile") && w:netrw_rexfile != "" +" call Decho("in netrw buffer, will edit file<".w:netrw_rexfile.">") + exe "e ".w:netrw_rexfile + unlet w:netrw_rexfile +" call Dret("s:NetrwRexplore returning from netrw to buf#".bufnr("%")."<".bufname("%")."> (ft=".&ft.")") + return + endif + + " record current file so :Rex can return to it from netrw + let w:netrw_rexfile= expand("%") + if !exists("w:netrw_rexlocal") -" call Dret("s:NetrwRexplore() w:netrw_rexlocal doesn't exist") +" call Dret("s:NetrwRexplore w:netrw_rexlocal doesn't exist (".&ft.")") return endif -" call Decho("(NetrwRexplore) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) if w:netrw_rexlocal keepj call netrw#LocalBrowseCheck(w:netrw_rexdir) else keepj call s:NetrwBrowse(0,w:netrw_rexdir) endif if exists("s:initbeval") - set beval + setl beval endif if exists("s:rexposn_".bufnr("%")) -" call Decho("(NetrwRexplore) restore posn, then unlet s:rexposn_".bufnr('%')) - keepj call netrw#NetrwRestorePosn(s:rexposn_{bufnr('%')}) +" call Decho("restore posn, then unlet s:rexposn_".bufnr('%')) + keepj call netrw#RestorePosn(s:rexposn_{bufnr('%')}) unlet s:rexposn_{bufnr('%')} else -" call Decho("(NetrwRexplore) s:rexposn_".bufnr('%')." doesn't exist") +" call Decho("s:rexposn_".bufnr('%')." doesn't exist") endif + if exists("s:explore_match") exe "2match netrwMarkFile /".s:explore_match."/" endif -" call Decho("(NetrwRexplore) settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) -" call Dret("s:NetrwRexplore") + +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Dret("s:NetrwRexplore : ft=".&ft) endfun " --------------------------------------------------------------------- diff --git a/runtime/autoload/phpcomplete.vim b/runtime/autoload/phpcomplete.vim index 07565558f..2ff94ced2 100644 --- a/runtime/autoload/phpcomplete.vim +++ b/runtime/autoload/phpcomplete.vim @@ -1,27 +1,99 @@ " Vim completion script " Language: PHP -" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) -" Last Change: 2011 Dec 08 +" Maintainer: Dávid Szabó ( complex857 AT gmail DOT com ) +" Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) " -" TODO: -" - Class aware completion: -" a) caching? -" - Switching to HTML (XML?) completion (SQL) inside of phpStrings -" - allow also for XML completion <- better do html_flavor for HTML -" completion -" - outside of <?php?> getting parent tag may cause problems. Heh, even in -" perfect conditions GetLastOpenTag doesn't cooperate... Inside of -" phpStrings this can be even a bonus but outside of <?php?> it is not the -" best situation - -function! phpcomplete#CompletePHP(findstart, base) +" OPTIONS: +" +" let g:phpcomplete_relax_static_constraint = 1/0 [default 0] +" Enables completion for non-static methods when completing for static context (::). +" This generates E_STRICT level warning, but php calls these methods nontheless. +" +" let g:phpcomplete_complete_for_unknown_classes = 1/0 [default 0] +" Enables completion of variables and functions in "everything under the sun" fashion +" when completing for an instance or static class context but the code can't tell the class +" or locate the file that it lives in. +" The completion list generated this way is only filtered by the completion base +" and generally not much more accurate then simple keyword completion. +" +" let g:phpcomplete_search_tags_for_variables = 1/0 [default 0] +" Enables use of tags when the plugin tries to find variables. +" When enabled the plugin will search for the variables in the tag files with kind 'v', +" lines like $some_var = new Foo; but these usually yield highly inaccurate results and +" can be fairly slow. +" +" let g:phpcomplete_min_num_of_chars_for_namespace_completion = n [default 1] +" This option controls the number of characters the user needs to type before +" the tags will be searched for namespaces and classes in typed out namespaces in +" "use ..." context. Setting this to 0 is not recommended because that means the code +" have to scan every tag, and vim's taglist() function runs extremly slow with a +" "match everything" pattern. +" +" let g:phpcomplete_parse_docblock_comments = 1/0 [default 0] +" When enabled the preview window's content will include information +" extracted from docblock comments of the completions. +" Enabling this option will add return types to the completion menu for functions too. +" +" let g:phpcomplete_cache_taglists = 1/0 [default 1] +" When enabled the taglist() lookups will be cached and subsequent searches +" for the same pattern will not check the tagfiles any more, thus making the +" lookups faster. Cache expiration is based on the mtimes of the tag files. +" +" TODO: +" - Switching to HTML (XML?) completion (SQL) inside of phpStrings +" - allow also for XML completion <- better do html_flavor for HTML +" completion +" - outside of <?php?> getting parent tag may cause problems. Heh, even in +" perfect conditions GetLastOpenTag doesn't cooperate... Inside of +" phpStrings this can be even a bonus but outside of <?php?> it is not the +" best situation + +if !exists('g:phpcomplete_relax_static_constraint') + let g:phpcomplete_relax_static_constraint = 0 +endif + +if !exists('g:phpcomplete_complete_for_unknown_classes') + let g:phpcomplete_complete_for_unknown_classes = 0 +endif + +if !exists('g:phpcomplete_search_tags_for_variables') + let g:phpcomplete_search_tags_for_variables = 0 +endif + +if !exists('g:phpcomplete_min_num_of_chars_for_namespace_completion') + let g:phpcomplete_min_num_of_chars_for_namespace_completion = 1 +endif + +if !exists('g:phpcomplete_parse_docblock_comments') + let g:phpcomplete_parse_docblock_comments = 0 +endif + +if !exists('g:phpcomplete_cache_taglists') + let g:phpcomplete_cache_taglists = 1 +endif + +if !exists('s:cache_classstructures') + let s:cache_classstructures = {} +endif + +if !exists('s:cache_tags') + let s:cache_tags = {} +endif + +if !exists('s:cache_tags_checksum') + let s:cache_tags_checksum = '' +endif + +let s:script_path = fnamemodify(resolve(expand('<sfile>:p')), ':h') + +function! phpcomplete#CompletePHP(findstart, base) " {{{ if a:findstart unlet! b:php_menu " Check if we are inside of PHP markup let pos = getpos('.') let phpbegin = searchpairpos('<?', '', '?>', 'bWn', \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\|comment"') - let phpend = searchpairpos('<?', '', '?>', 'Wn', + let phpend = searchpairpos('<?', '', '?>', 'Wn', \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\|comment"') if phpbegin == [0,0] && phpend == [0,0] @@ -37,5108 +109,2416 @@ function! phpcomplete#CompletePHP(findstart, base) let start = col('.') - 1 let curline = line('.') let compl_begin = col('.') - 2 - while start >= 0 && line[start - 1] =~ '[a-zA-Z_0-9\x7f-\xff$]' + while start >= 0 && line[start - 1] =~ '[\\a-zA-Z_0-9\x7f-\xff$]' let start -= 1 endwhile - let b:compl_context = getline('.')[0:compl_begin] - return start + let b:phpbegin = phpbegin + let b:compl_context = phpcomplete#GetCurrentInstruction(line('.'), col('.') - 2, phpbegin) + return start " We can be also inside of phpString with HTML tags. Deal with " it later (time, not lines). endif - endif + + " If exists b:php_menu it means completion was already constructed we " don't need to do anything more if exists("b:php_menu") return b:php_menu endif - " Initialize base return lists - let res = [] - let res2 = [] + + if !exists('g:php_builtin_functions') + call phpcomplete#LoadData() + endif + " a:base is very short - we need context if exists("b:compl_context") let context = b:compl_context unlet! b:compl_context - endif + " chop of the "base" from the end of the current instruction + if a:base != "" + let context = substitute(context, '\s*\$\?\([a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\)*$', '', '') + end + end - if !exists('g:php_builtin_functions') - call phpcomplete#LoadData() + let [current_namespace, imports] = phpcomplete#GetCurrentNameSpace(getline(0, line('.'))) + + if context =~? '^use\s' + return phpcomplete#CompleteUse(a:base) endif - let scontext = substitute(context, '\$\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*$', '', '') - - if scontext =~ '\(=\s*new\|extends\)\s\+$' - " Complete class name - " Internal solution for finding classes in current file. - let file = getline(1, '$') - call filter(file, - \ 'v:val =~ "class\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("') - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let jfile = join(file, ' ') - let int_values = split(jfile, 'class\s\+') - let int_classes = {} - for i in int_values - let c_name = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') - if c_name != '' - let int_classes[c_name] = '' + if context =~ '\(->\|::\)$' + " {{{ + " Get name of the class + let classname = phpcomplete#GetClassName(line('.'), context, current_namespace, imports) + + " Get location of class definition, we have to iterate through all + if classname != '' + if classname =~ '\' + " split the last \ segment as a classname, everything else is the namespace + let classname_parts = split(classname, '\') + let namespace = join(classname_parts[0:-2], '\') + let classname = classname_parts[-1] + else + let namespace = '\' endif - endfor + let classlocation = phpcomplete#GetClassLocation(classname, namespace) + else + let classlocation = '' + endif - " Prepare list of classes from tags file - let ext_classes = {} - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - if fnames != '' - exe 'silent! vimgrep /^'.a:base.'.*\tc\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - " [:space:] thing: we don't have to be so strict when - " dealing with tags files - entries there were already - " checked by ctags. - let item = matchstr(field['text'], '^[^[:space:]]\+') - let ext_classes[item] = '' - endfor + if classlocation != '' + if classlocation == 'VIMPHP_BUILTINOBJECT' && has_key(g:php_builtin_classes, tolower(classname)) + return phpcomplete#CompleteBuiltInClass(context, classname, a:base) endif - endif - " Prepare list of built in classes from g:php_builtin_functions - if !exists("g:php_omni_bi_classes") - let g:php_omni_bi_classes = {} - for i in keys(g:php_builtin_object_functions) - let g:php_omni_bi_classes[substitute(i, '::.*$', '', '')] = '' - endfor + if filereadable(classlocation) + let classfile = readfile(classlocation) + let classcontent = '' + let classcontent .= "\n".phpcomplete#GetClassContents(classlocation, classname) + let sccontent = split(classcontent, "\n") + let visibility = expand('%:p') == fnamemodify(classlocation, ':p') ? 'private' : 'public' + + return phpcomplete#CompleteUserClass(context, a:base, sccontent, visibility) + endif endif - let classes = sort(keys(int_classes)) - let classes += sort(keys(ext_classes)) - let classes += sort(keys(g:php_omni_bi_classes)) + return phpcomplete#CompleteUnknownClass(a:base, context) + " }}} + elseif context =~? 'implements' + return phpcomplete#CompleteClassName(a:base, ['i'], current_namespace, imports) + elseif context =~? 'extends\s\+.\+$' + return ['implements'] + elseif context =~? 'extends' + let kinds = context =~? 'class\s' ? ['c'] : ['i'] + return phpcomplete#CompleteClassName(a:base, kinds, current_namespace, imports) + elseif context =~? 'class [a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*' + " special case when you've typed the class keyword and the name too, only extends and implements allowed there + return filter(['extends', 'implements'], 'stridx(v:val, a:base) == 0') + elseif context =~? 'new' + return phpcomplete#CompleteClassName(a:base, ['c'], current_namespace, imports) + endif - for m in classes - if m =~ '^'.a:base - call add(res, m) + if a:base =~ '^\$' + return phpcomplete#CompleteVariable(a:base) + else + return phpcomplete#CompleteGeneral(a:base, current_namespace, imports) + endif +endfunction +" }}} + +function! phpcomplete#CompleteUse(base) " {{{ + " completes builtin class names regadless of g:phpcomplete_min_num_of_chars_for_namespace_completion + " completes namespaces from tags + " * requires patched ctags + " completes classnames from tags within the already typed out namespace using the "namespace" field of tags + " * requires patched ctags + + let res = [] + + " class and namespace names are always considered absoltute in use ... expressions, leading slash is not recommended + " by the php manual, so we gonna get rid of that + if a:base =~? '^\' + let base = substitute(a:base, '^\', '', '') + else + let base = a:base + endif + + let namespace_match_pattern = substitute(base, '\\', '\\\\', 'g') + let classname_match_pattern = matchstr(base, '[^\\]\+$') + let namespace_for_class = substitute(substitute(namespace_match_pattern, '\\\\', '\\', 'g'), '\\*'.classname_match_pattern.'$', '', '') + + if len(namespace_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion + if len(classname_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion + let tags = phpcomplete#GetTaglist('^\('.namespace_match_pattern.'\|'.classname_match_pattern.'\)') + else + let tags = phpcomplete#GetTaglist('^'.namespace_match_pattern) + endif + + let patched_ctags_detected = 0 + let namespaced_matches = [] + let no_namespace_matches = [] + for tag in tags + if has_key(tag, 'namespace') + let patched_ctags_detected = 1 + endif + if tag.kind ==? 'n' && tag.name =~? '^'.namespace_match_pattern + let patched_ctags_detected = 1 + call add(namespaced_matches, {'word': tag.name, 'kind': 'n', 'menu': tag.filename, 'info': tag.filename }) + elseif has_key(tag, 'namespace') && (tag.kind ==? 'c' || tag.kind ==? 'i') && tag.namespace ==? namespace_for_class + call add(namespaced_matches, {'word': namespace_for_class.'\'.tag.name, 'kind': tag.kind, 'menu': tag.filename, 'info': tag.filename }) + elseif (tag.kind ==? 'c' || tag.kind ==? 'i') + call add(no_namespace_matches, {'word': namespace_for_class.'\'.tag.name, 'kind': tag.kind, 'menu': tag.filename, 'info': tag.filename }) endif endfor + " if it seems that the tags file have namespace informations we can safely throw + " away namespaceless tag matches since we can be sure they are invalid + if patched_ctags_detected + no_namespace_matches = [] + endif + let res += namespaced_matches + no_namespace_matches + endif - let final_menu = [] - for i in res - let final_menu += [{'word':i, 'kind':'c'}] + if base !~ '\' + let builtin_classnames = filter(keys(copy(g:php_builtin_classnames)), 'v:val =~? "^'.classname_match_pattern.'"') + for classname in builtin_classnames + call add(res, {'word': classname, 'kind': 'c'}) + endfor + let builtin_interfacenames = filter(keys(copy(g:php_builtin_interfacenames)), 'v:val =~? "^'.classname_match_pattern.'"') + for interfacename in builtin_interfacenames + call add(res, {'word': interfacename, 'kind': 'i'}) endfor + endif - return final_menu + return res +endfunction +" }}} - elseif scontext =~ '\(->\|::\)$' - " Complete user functions and variables - " Internal solution for current file. - " That seems as unnecessary repeating of functions but there are - " few not so subtle differences as not appending of $ and addition - " of 'kind' tag (not necessary in regular completion) +function! phpcomplete#CompleteGeneral(base, current_namespace, imports) " {{{ + " Complete everything else - + " + functions, DONE + " + keywords of language DONE + " + defines (constant definitions), DONE + " + extend keywords for predefined constants, DONE + " + classes (after new), DONE + " + limit choice after -> and :: to funcs and vars DONE - if scontext =~ '->$' && scontext !~ '\$this->$' + " Internal solution for finding functions in current file. - " Get name of the class - let classname = phpcomplete#GetClassName(scontext) + if a:base =~? '^\' + let leading_slash = '\' + else + let leading_slash = '' + endif - " Get location of class definition, we have to iterate through all - " tags files separately because we need relative path from current - " file to the exact file (tags file can be in different dir) - if classname != '' - let classlocation = phpcomplete#GetClassLocation(classname) - else - let classlocation = '' - endif + let file = getline(1, '$') + call filter(file, + \ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("') + let jfile = join(file, ' ') + let int_values = split(jfile, 'function\s\+') + let int_functions = {} + for i in int_values + let f_name = matchstr(i, + \ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') + if f_name =~? '^'.substitute(a:base, '\\', '\\\\', 'g') + let f_args = matchstr(i, + \ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*\({\|$\)') + let int_functions[f_name.'('] = f_args.')' + endif + endfor - if classlocation == 'VIMPHP_BUILTINOBJECT' + " Internal solution for finding constants in current file + let file = getline(1, '$') + call filter(file, 'v:val =~ "define\\s*("') + let jfile = join(file, ' ') + let int_values = split(jfile, 'define\s*(\s*') + let int_constants = {} + for i in int_values + let c_name = matchstr(i, '\(["'']\)\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze\1') + if c_name != '' && c_name =~# '^'.substitute(a:base, '\\', '\\\\', 'g') + let int_constants[leading_slash.c_name] = '' + endif + endfor - for object in keys(g:php_builtin_object_functions) - if object =~ '^'.classname - let res += [{'word':substitute(object, '.*::', '', ''), - \ 'info': g:php_builtin_object_functions[object]}] - endif - endfor + " Prepare list of functions from tags file + let ext_functions = {} + let ext_constants = {} + let ext_classes = {} + let ext_interfaces = {} + let ext_namespaces = {} + + let base = substitute(a:base, '^\\', '', '') + let [tag_match_pattern, namespace_for_tag] = phpcomplete#ExpandClassName(a:base, a:current_namespace, a:imports) + let namespace_match_pattern = substitute((namespace_for_tag == '' ? '' : namespace_for_tag.'\').tag_match_pattern, '\\', '\\\\', 'g') + + let tags = [] + if len(namespace_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion && len(tag_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion && tag_match_pattern != namespace_match_pattern + let tags = phpcomplete#GetTaglist('\c^\('.tag_match_pattern.'\|'.namespace_match_pattern.'\)') + elseif len(namespace_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion + let tags = phpcomplete#GetTaglist('\c^'.namespace_match_pattern) + elseif len(tag_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion + let tags = phpcomplete#GetTaglist('\c^'.tag_match_pattern) + endif - return res + for tag in tags + if !has_key(tag, 'namespace') || tag.namespace ==? a:current_namespace || tag.namespace ==? namespace_for_tag + if has_key(tag, 'namespace') + let full_name = tag.namespace.'\'.tag.name " absolute namespaced name (without leading '\') + let base_parts = split(a:base, '\') + if len(base_parts) > 1 + let namespace_part = join(base_parts[0:-2], '\') + else + let namespace_part = '' + endif + let relative_name = (namespace_part == '' ? '' : namespace_part.'\').tag.name endif - if filereadable(classlocation) - let classfile = readfile(classlocation) - let classcontent = '' - let classcontent .= "\n".phpcomplete#GetClassContents(classfile, classname) - let sccontent = split(classcontent, "\n") + if tag.kind ==? 'n' && tag.name =~? '^'.namespace_match_pattern + let info = tag.name.' - '.tag.filename + " patched ctag provides absolute namespace names as tag name, namespace tags dont have namespace fields + let full_name = tag.name + + let base_parts = split(a:base, '\') + let full_name_parts = split(full_name, '\') + if len(base_parts) > 1 + " the first segment could be a renamed import, take the first segment from the user provided input + " so if it's a sub namespace of a renamed namespace, just use the typed in segments in place of the absolute path + " for example: + " you have a namespace NS1\SUBNS as SUB + " you have a sub-sub-namespace NS1\SUBNS\SUBSUB + " typed in SUB\SU + " the tags will return NS1\SUBNS\SUBSUB + " the completion should be: SUB\SUBSUB by replacing the NS1\SUBSN to SUB as in the import + if has_key(a:imports, base_parts[0]) && a:imports[base_parts[0]].kind == 'n' + let import = a:imports[base_parts[0]] + let relative_name = substitute(full_name, '^'.substitute(import.name, '\\', '\\\\', 'g'), base_parts[0], '') + else + let relative_name = strpart(full_name, stridx(full_name, a:base)) + endif + else + let relative_name = strpart(full_name, stridx(full_name, a:base)) + endif - " YES, YES, YES! - we have whole content including extends! - " Now we need to get two elements: public functions and public - " vars - " NO, NO, NO! - third separate filtering looking for content - " :(, but all of them have differences. To squeeze them into - " one implementation would require many additional arguments - " and ifs. No good solution - " Functions declared with public keyword or without any - " keyword are public - let functions = filter(deepcopy(sccontent), - \ 'v:val =~ "^\\s*\\(static\\s\\+\\|public\\s\\+\\)*function"') - let jfuncs = join(functions, ' ') - let sfuncs = split(jfuncs, 'function\s\+') - let c_functions = {} - for i in sfuncs - let f_name = matchstr(i, - \ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') - let f_args = matchstr(i, - \ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*{') - if f_name != '' - let c_functions[f_name.'('] = f_args + if leading_slash == '' + let ext_namespaces[relative_name.'\'] = info + else + let ext_namespaces['\'.full_name.'\'] = info + endif + elseif tag.kind ==? 'f' && !has_key(tag, 'class') " class related functions (methods) completed elsewhere, only works with patched ctags + if has_key(tag, 'signature') + let prototype = tag.signature[1:-2] " drop the ()s around the string + else + let prototype = matchstr(tag.cmd, + \ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?') + endif + let info = prototype.') - '.tag.filename + + if !has_key(tag, 'namespace') + let ext_functions[tag.name.'('] = info + else + if tag.namespace ==? namespace_for_tag + if leading_slash == '' + let ext_functions[relative_name.'('] = info + else + let ext_functions['\'.full_name.'('] = info + endif endif - endfor - " Variables declared with var or with public keyword are - " public - let variables = filter(deepcopy(sccontent), - \ 'v:val =~ "^\\s*\\(public\\|var\\)\\s\\+\\$"') - let jvars = join(variables, ' ') - let svars = split(jvars, '\$') - let c_variables = {} - for i in svars - let c_var = matchstr(i, - \ '^\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') - if c_var != '' - let c_variables[c_var] = '' + endif + elseif tag.kind ==? 'd' + let info = ' - '.tag.filename + if !has_key(tag, 'namespace') + let ext_constants[tag.name] = info + else + if tag.namespace ==? namespace_for_tag + if leading_slash == '' + let ext_constants[relative_name] = info + else + let ext_constants['\'.full_name] = info + endif endif - endfor - - let all_values = {} - call extend(all_values, c_functions) - call extend(all_values, c_variables) - - for m in sort(keys(all_values)) - if m =~ '^'.a:base && m !~ '::' - call add(res, m) - elseif m =~ '::'.a:base - call add(res2, m) + endif + elseif tag.kind ==? 'c' || tag.kind ==? 'i' + let info = ' - '.tag.filename + + let key = '' + if !has_key(tag, 'namespace') + let key = tag.name + else + if tag.namespace ==? namespace_for_tag + if leading_slash == '' + let key = relative_name + else + let key = '\'.full_name + endif endif - endfor - - let start_list = res + res2 + endif - let final_list = [] - for i in start_list - if has_key(c_variables, i) - let class = ' ' - if all_values[i] != '' - let class = i.' class ' - endif - let final_list += - \ [{'word':i, - \ 'info':class.all_values[i], - \ 'kind':'v'}] - else - let final_list += - \ [{'word':substitute(i, '.*::', '', ''), - \ 'info':i.all_values[i].')', - \ 'kind':'f'}] + if key != '' + if tag.kind ==? 'c' + let ext_classes[key] = info + elseif tag.kind ==? 'i' + let ext_interfaces[key] = info endif - endfor + endif + endif + endif + endfor + + let builtin_constants = {} + let builtin_classnames = {} + let builtin_interfaces = {} + let builtin_functions = {} + let builtin_keywords = {} + let base = substitute(a:base, '^\', '', '') + if a:current_namespace == '\' || (a:base =~ '^\\' && a:base =~ '^\\[^\\]*$') + + " Add builtin class names + for [classname, info] in items(g:php_builtin_classnames) + if classname =~? '^'.base + let builtin_classnames[leading_slash.classname] = info + endif + endfor + for [interfacename, info] in items(g:php_builtin_interfacenames) + if interfacename =~? '^'.base + let builtin_interfaces[leading_slash.interfacename] = info + endif + endfor + endif - return final_list + " Prepare list of constants from built-in constants + for [constant, info] in items(g:php_constants) + if constant =~# '^'.base + let builtin_constants[leading_slash.constant] = info + endif + endfor + if leading_slash == '' " keywords should not be completed when base starts with '\' + " Treat keywords as constants + for [constant, info] in items(g:php_keywords) + if constant =~? '^'.a:base + let builtin_keywords[constant] = info endif + endfor + endif + for [function_name, info] in items(g:php_builtin_functions) + if function_name =~? '^'.base + let builtin_functions[leading_slash.function_name] = info endif + endfor - if a:base =~ '^\$' - let adddollar = '$' + " All constants + call extend(int_constants, ext_constants) + + " All functions + call extend(int_functions, ext_functions) + call extend(int_functions, builtin_functions) + + for [imported_name, import] in items(a:imports) + if imported_name =~? '^'.base + if import.kind ==? 'c' + if import.builtin + let builtin_classnames[imported_name] = ' '.import.name + else + let ext_classes[imported_name] = ' '.import.name.' - '.import.filename + endif + elseif import.kind ==? 'i' + if import.builtin + let builtin_interfaces[imported_name] = ' '.import.name + else + let ext_interfaces[imported_name] = ' '.import.name.' - '.import.filename + endif + endif + + " no builtin interfaces + if import.kind == 'n' + let ext_namespaces[imported_name.'\'] = ' '.import.name.' - '.import.filename + endif + end + endfor + + let all_values = {} + + " Add functions found in this file + call extend(all_values, int_functions) + + " Add namespaces from tags + call extend(all_values, ext_namespaces) + + " Add constants from the current file + call extend(all_values, int_constants) + + " Add built-in constants + call extend(all_values, builtin_constants) + + " Add external classes + call extend(all_values, ext_classes) + + " Add external interfaces + call extend(all_values, ext_interfaces) + + " Add built-in classes + call extend(all_values, builtin_classnames) + + " Add built-in interfaces + call extend(all_values, builtin_interfaces) + + " Add php keywords + call extend(all_values, builtin_keywords) + + let final_list = [] + let int_list = sort(keys(all_values)) + for i in int_list + if has_key(ext_namespaces, i) + let final_list += [{'word':i, 'kind':'n', 'menu': ext_namespaces[i], 'info': ext_namespaces[i]}] + elseif has_key(int_functions, i) + let final_list += + \ [{'word':i, + \ 'info':i.int_functions[i], + \ 'menu':int_functions[i], + \ 'kind':'f'}] + elseif has_key(ext_classes, i) || has_key(builtin_classnames, i) + let info = has_key(ext_classes, i) ? ext_classes[i] : builtin_classnames[i].' - builtin' + let final_list += [{'word':i, 'kind': 'c', 'menu': info, 'info': i.info}] + elseif has_key(ext_interfaces, i) || has_key(builtin_interfaces, i) + let info = has_key(ext_interfaces, i) ? ext_interfaces[i] : builtin_interfaces[i].' - builtin' + let final_list += [{'word':i, 'kind': 'i', 'menu': info, 'info': i.info}] + elseif has_key(int_constants, i) || has_key(builtin_constants, i) + let info = has_key(int_constants, i) ? int_constants[i] : ' - builtin' + let final_list += [{'word':i, 'kind': 'd', 'menu': info, 'info': i.info}] else - let adddollar = '' + let final_list += [{'word':i}] + endif + endfor + + return final_list +endfunction +" }}} + +function! phpcomplete#CompleteUnknownClass(base, context) " {{{ + let res = [] + + if g:phpcomplete_complete_for_unknown_classes != 1 + return [] + endif + + if a:base =~ '^\$' + let adddollar = '$' + else + let adddollar = '' + endif + + let file = getline(1, '$') + + " Internal solution for finding object properties in current file. + if a:context =~ '::' + let variables = filter(deepcopy(file), + \ 'v:val =~ "^\\s*\\(static\\|static\\s\\+\\(public\\|var\\)\\|\\(public\\|var\\)\\s\\+static\\)\\s\\+\\$"') + elseif a:context =~ '->' + let variables = filter(deepcopy(file), + \ 'v:val =~ "^\\s*\\(public\\|var\\)\\s\\+\\$"') + endif + let jvars = join(variables, ' ') + let svars = split(jvars, '\$') + let int_vars = {} + for i in svars + let c_var = matchstr(i, + \ '^\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') + if c_var != '' + let int_vars[adddollar.c_var] = '' endif - let file = getline(1, '$') - let jfile = join(file, ' ') - let sfile = split(jfile, '\$') - let int_vars = {} - for i in sfile - if i =~ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*=\s*new' - let val = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*').'->' + endfor + + " Internal solution for finding functions in current file. + call filter(deepcopy(file), + \ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("') + let jfile = join(file, ' ') + let int_values = split(jfile, 'function\s\+') + let int_functions = {} + for i in int_values + let f_name = matchstr(i, + \ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') + let f_args = matchstr(i, + \ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*\({\|$\)') + + let int_functions[f_name.'('] = f_args.')' + endfor + + " collect external functions from tags + let ext_functions = {} + let tags = phpcomplete#GetTaglist('^'.substitute(a:base, '^\$', '', '')) + for tag in tags + if tag.kind ==? 'f' + let item = tag.name + if has_key(tag, 'signature') + let prototype = tag.signature[1:-2] else - let val = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') + let prototype = matchstr(tag.cmd, + \ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?') endif - if val !~ '' - let int_vars[adddollar.val] = '' - endif - endfor + let ext_functions[item.'('] = prototype.') - '.tag['filename'] + endif + endfor - " ctags has good support for PHP, use tags file for external - " variables - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let ext_vars = {} - if fnames != '' - let sbase = substitute(a:base, '^\$', '', '') - exe 'silent! vimgrep /^'.sbase.'.*\tv\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - let item = matchstr(field['text'], '^[^[:space:]]\+') - " Add -> if it is possible object declaration - let classname = '' - if field['text'] =~ item.'\s*=\s*new\s\+' - let item = item.'->' - let classname = matchstr(field['text'], - \ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze') - endif - let ext_vars[adddollar.item] = classname - endfor + " All functions to one hash for later reference when deciding kind + call extend(int_functions, ext_functions) + + let all_values = {} + call extend(all_values, int_functions) + call extend(all_values, int_vars) " external variables are already in + call extend(all_values, g:php_builtin_object_functions) + + for m in sort(keys(all_values)) + if m =~ '\(^\|::\)'.a:base + call add(res, m) + endif + endfor + + let start_list = res + + let final_list = [] + for i in start_list + if has_key(int_vars, i) + let class = ' ' + if all_values[i] != '' + let class = i.' class ' endif + let final_list += [{'word':i, 'info':class.all_values[i], 'kind':'v'}] + else + let final_list += + \ [{'word':substitute(i, '.*::', '', ''), + \ 'info':i.all_values[i], + \ 'menu':all_values[i], + \ 'kind':'f'}] endif + endfor + return final_list +endfunction +" }}} - " Now we have all variables in int_vars dictionary - call extend(int_vars, ext_vars) +function! phpcomplete#CompleteVariable(base) " {{{ + let res = [] - " Internal solution for finding functions in current file. - let file = getline(1, '$') - call filter(file, - \ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("') - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let jfile = join(file, ' ') - let int_values = split(jfile, 'function\s\+') - let int_functions = {} - for i in int_values - let f_name = matchstr(i, - \ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') - let f_args = matchstr(i, - \ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*{') - let int_functions[f_name.'('] = f_args.')' - endfor + " Internal solution for current file. + let file = getline(1, '$') + let jfile = join(file, ' ') + let int_vals = split(jfile, '\ze\$') + let int_vars = {} + for i in int_vals + if i =~? '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*=\s*new' + let val = matchstr(i, + \ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') + else + let val = matchstr(i, + \ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') + endif + if val != '' + let int_vars[val] = '' + endif + endfor - " Prepare list of functions from tags file - let ext_functions = {} - if fnames != '' - exe 'silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - " File name - let item = matchstr(field['text'], '^[^[:space:]]\+') - let fname = matchstr(field['text'], '\t\zs\f\+\ze') - let prototype = matchstr(field['text'], - \ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?') - let ext_functions[item.'('] = prototype.') - '.fname - endfor + call extend(int_vars, g:php_builtin_vars) + + " ctags has support for PHP, use tags file for external variables + if g:phpcomplete_search_tags_for_variables + let ext_vars = {} + let tags = phpcomplete#GetTaglist('\C^'.substitute(a:base, '^\$', '', '')) + for tag in tags + if tag.kind ==? 'v' + let item = tag.name + let m_menu = '' + if tag.cmd =~? tag['name'].'\s*=\s*new\s\+' + let m_menu = matchstr(tag.cmd, + \ '\c=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze') + endif + let ext_vars['$'.item] = m_menu endif + endfor + call extend(int_vars, ext_vars) + endif + + for m in sort(keys(int_vars)) + if m =~# '^\'.a:base + call add(res, m) endif + endfor - let all_values = {} - call extend(all_values, int_functions) - call extend(all_values, ext_functions) - call extend(all_values, int_vars) " external variables are already in - call extend(all_values, g:php_builtin_object_functions) + let int_list = res - for m in sort(keys(all_values)) - if m =~ '\(^\|::\)'.a:base - call add(res, m) + let int_dict = [] + for i in int_list + if int_vars[i] != '' + let class = ' ' + if int_vars[i] != '' + let class = i.' class ' endif - endfor + let int_dict += [{'word':i, 'info':class.int_vars[i], 'menu':int_vars[i], 'kind':'v'}] + else + let int_dict += [{'word':i, 'kind':'v'}] + endif + endfor - let start_list = res + return int_dict +endfunction +" }}} - let final_list = [] - for i in start_list - if has_key(int_vars, i) - let class = ' ' - if all_values[i] != '' - let class = i.' class ' - endif - let final_list += [{'word':i, 'info':class.all_values[i], 'kind':'v'}] - else - let final_list += - \ [{'word':substitute(i, '.*::', '', ''), - \ 'info':i.all_values[i], - \ 'kind':'f'}] +function! phpcomplete#CompleteClassName(base, kinds, current_namespace, imports) " {{{ + let kinds = sort(a:kinds) + " Complete class name + let res = [] + if a:base =~? '^\' + let leading_slash = '\' + let base = substitute(a:base, '^\', '', '') + else + let leading_slash = '' + let base = a:base + endif + + " Internal solution for finding classes in current file. + let file = getline(1, '$') + let filterstr = '' + + if kinds == ['c', 'i'] + let filterstr = 'v:val =~? "\\(class\\|interface\\)\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"' + elseif kinds == ['c'] + let filterstr = 'v:val =~? "class\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"' + elseif kinds == ['i'] + let filterstr = 'v:val =~? "interface\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"' + endif + + call filter(file, filterstr) + + for line in file + let c_name = matchstr(line, '\c\(class\|interface\)\s*\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') + let kind = (line =~? '^\s*class' ? 'c' : 'i') + if c_name != '' && c_name =~? '^'.base + call add(res, {'word': c_name, 'kind': kind}) + endif + endfor + + " resolve the typed in part with namespaces (if theres a \ in it) + let [tag_match_pattern, namespace_for_class] = phpcomplete#ExpandClassName(a:base, a:current_namespace, a:imports) + + let tags = [] + if len(tag_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion + let tags = phpcomplete#GetTaglist('^'.tag_match_pattern) + endif + + if len(tags) + let base_parts = split(a:base, '\') + if len(base_parts) > 1 + let namespace_part = join(base_parts[0:-2], '\').'\' + else + let namespace_part = '' + endif + let no_namespace_matches = [] + let namespaced_matches = [] + let seen_namespaced_tag = 0 + for tag in tags + if has_key(tag, 'namespace') + let seen_namespaced_tag = 1 + endif + let relative_name = namespace_part.tag.name + " match base without the namespace part for namespaced base but not namespaced tags, for tagfiles with old ctags + if !has_key(tag, 'namespace') && index(kinds, tag.kind) != -1 && stridx(tag.name, base[len(namespace_part):]) == 0 + call add(no_namespace_matches, {'word': leading_slash.relative_name, 'kind': tag.kind, 'menu': tag.filename, 'info': tag.filename }) + endif + if has_key(tag, 'namespace') && index(kinds, tag.kind) != -1 && tag.namespace ==? namespace_for_class + let full_name = tag.namespace.'\'.tag.name " absolute namespaced name (without leading '\') + call add(namespaced_matches, {'word': leading_slash == '\' ? leading_slash.full_name : relative_name, 'kind': tag.kind, 'menu': tag.filename, 'info': tag.filename }) endif endfor + " if there was a tag with namespace field, assume tag files with namespace support, so the matches + " without a namespace field are in the global namespace so if there were namespace in the base + " we should not add them to the matches + if seen_namespaced_tag && namespace_part != '' + let no_namespace_matches = [] + endif + let res += no_namespace_matches + namespaced_matches + endif + + " look for built in classnames and interfaces + let base_parts = split(base, '\') + if a:current_namespace == '\' || (leading_slash == '\' && len(base_parts) < 2) + if index(kinds, 'c') != -1 + let builtin_classnames = filter(keys(copy(g:php_builtin_classnames)), 'v:val =~? "^'.substitute(a:base, '\\', '', 'g').'"') + for classname in builtin_classnames + let menu = '' + " if we have a constructor for this class, add parameters as to the info + if has_key(g:php_builtin_classes[tolower(classname)].methods, '__construct') + let menu = g:php_builtin_classes[tolower(classname)]['methods']['__construct']['signature'] + endif + call add(res, {'word': leading_slash.classname, 'kind': 'c', 'menu': menu}) + endfor + endif - return final_list + if index(kinds, 'i') != -1 + let builtin_interfaces = filter(keys(copy(g:php_builtin_interfaces)), 'v:val =~? "^'.substitute(a:base, '\\', '', 'g').'"') + for interfacename in builtin_interfaces + call add(res, {'word': leading_slash.g:php_builtin_interfaces[interfacename]['name'], 'kind': 'i', 'menu': ''}) + endfor + endif endif - if a:base =~ '^\$' - " Complete variables - " Built-in variables {{{ - let g:php_builtin_vars = {'$GLOBALS':'', - \ '$_SERVER':'', - \ '$_GET':'', - \ '$_POST':'', - \ '$_COOKIE':'', - \ '$_FILES':'', - \ '$_ENV':'', - \ '$_REQUEST':'', - \ '$_SESSION':'', - \ '$HTTP_SERVER_VARS':'', - \ '$HTTP_ENV_VARS':'', - \ '$HTTP_COOKIE_VARS':'', - \ '$HTTP_GET_VARS':'', - \ '$HTTP_POST_VARS':'', - \ '$HTTP_POST_FILES':'', - \ '$HTTP_SESSION_VARS':'', - \ '$php_errormsg':'', - \ '$this':'' - \ } - " }}} + " add matching imported things + for [imported_name, import] in items(a:imports) + if imported_name =~? '^'.base && index(kinds, import.kind) != -1 + let menu = import.name.(import.builtin ? ' - builtin' : '') + call add(res, {'word': imported_name, 'kind': import.kind, 'menu': menu}) + endif + endfor - " Internal solution for current file. - let file = getline(1, '$') - let jfile = join(file, ' ') - let int_vals = split(jfile, '\ze\$') - let int_vars = {} - for i in int_vals - if i =~ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*=\s*new' - let val = matchstr(i, - \ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*').'->' - else - let val = matchstr(i, - \ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') + let res = sort(res, 'phpcomplete#CompareCompletionRow') + return res +endfunction +" }}} + +function! phpcomplete#CompareCompletionRow(i1, i2) " {{{ + return a:i1.word == a:i2.word ? 0 : a:i1.word > a:i2.word ? 1 : -1 +endfunction +" }}} + +function! phpcomplete#EvaluateModifiers(modifiers, required_modifiers, prohibited_modifiers) " {{{ + " if theres no modifier, and no modifier is allowed and no modifier is required + if len(a:modifiers) == 0 && len(a:required_modifiers) == 0 + return 1 + else + " check if every requred modifier is present + for required_modifier in a:required_modifiers + if index(a:modifiers, required_modifier) == -1 + return 0 endif - if val != '' - let int_vars[val] = '' + endfor + + for modifier in a:modifiers + " if the modifier is prohibited its a no match + if index(a:prohibited_modifiers, modifier) != -1 + return 0 endif endfor - call extend(int_vars,g:php_builtin_vars) + " anything that is not explicitly required or prohibited is allowed + return 1 + endif +endfunction +" }}} - " ctags has support for PHP, use tags file for external variables - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let ext_vars = {} - if fnames != '' - let sbase = substitute(a:base, '^\$', '', '') - exe 'silent! vimgrep /^'.sbase.'.*\tv\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - let item = '$'.matchstr(field['text'], '^[^[:space:]]\+') - let m_menu = '' - " Add -> if it is possible object declaration - if field['text'] =~ item.'\s*=\s*new\s\+' - let item = item.'->' - let m_menu = matchstr(field['text'], - \ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze') - endif - let ext_vars[item] = m_menu - endfor +function! phpcomplete#CompleteUserClass(context, base, sccontent, visibility) " {{{ + let final_list = [] + let res = [] + + let required_modifiers = [] + let prohibited_modifiers = [] + + if a:visibility == 'public' + let prohibited_modifiers += ['private', 'protected'] + endif + + " limit based on context to static or normal methods + let static_con = '' + if a:context =~ '::$' && a:context !~? 'parent::$' + if g:phpcomplete_relax_static_constraint != 1 + let required_modifiers += ['static'] + endif + elseif a:context =~ '->$' + let prohibited_modifiers += ['static'] + endif + + let all_function = filter(deepcopy(a:sccontent), + \ 'v:val =~ "^\\s*\\(public\\s\\+\\|protected\\s\\+\\|private\\s\\+\\|final\\s\\+\\|abstract\\s\\+\\|static\\s\\+\\)*function"') + + let functions = [] + for i in all_function + let modifiers = split(matchstr(tolower(i), '\zs.\+\zefunction'), '\s\+') + if phpcomplete#EvaluateModifiers(modifiers, required_modifiers, prohibited_modifiers) == 1 + call add(functions, i) + endif + endfor + + let c_functions = {} + let c_doc = {} + for i in functions + let f_name = matchstr(i, + \ 'function\s*&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') + let f_args = matchstr(i, + \ 'function\s*&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*\({\|\_$\)') + if f_name != '' + let c_functions[f_name.'('] = f_args + if g:phpcomplete_parse_docblock_comments + let c_doc[f_name.'('] = phpcomplete#GetDocBlock(a:sccontent, 'function\s*\<'.f_name.'\>') endif endif + endfor - call extend(int_vars, ext_vars) - let g:a0 = keys(int_vars) + " limit based on context to static or normal attributes + if a:context =~ '::$' && a:context !~? 'parent::$' + " variables must have static to be accessed as static unlike functions + let required_modifiers += ['static'] + endif + let all_variable = filter(deepcopy(a:sccontent), + \ 'v:val =~ "^\\s*\\(var\\s\\+\\|public\\s\\+\\|protected\\s\\+\\|private\\s\\+\\|final\\s\\+\\|abstract\\s\\+\\|static\\s\\+\\)\\+\\$"') + + let variables = [] + for i in all_variable + let modifiers = split(matchstr(tolower(i), '\zs.\+\ze\$'), '\s\+') + if phpcomplete#EvaluateModifiers(modifiers, required_modifiers, prohibited_modifiers) == 1 + call add(variables, i) + endif + endfor - for m in sort(keys(int_vars)) - if m =~ '^\'.a:base - call add(res, m) + let jvars = join(variables, ' ') + let svars = split(jvars, '\$') + let c_variables = {} + + let var_index = 0 + for i in svars + let c_var = matchstr(i, + \ '^\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') + if c_var != '' + if a:context =~ '::$' + let c_var = '$'.c_var endif - endfor + let c_variables[c_var] = '' + if g:phpcomplete_parse_docblock_comments && len(get(variables, var_index)) > 0 + let c_doc[c_var] = phpcomplete#GetDocBlock(a:sccontent, variables[var_index]) + endif + let var_index += 1 + endif + endfor - let int_list = res + let constants = filter(deepcopy(a:sccontent), + \ 'v:val =~ "^\\s*const\\s\\+"') + + let jcons = join(constants, ' ') + let scons = split(jcons, 'const') + + let c_constants = {} + let const_index = 0 + for i in scons + let c_con = matchstr(i, + \ '^\s*\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') + if c_con != '' + let c_constants[c_con] = '' + if g:phpcomplete_parse_docblock_comments && len(get(constants, const_index)) > 0 + let c_doc[c_con] = phpcomplete#GetDocBlock(a:sccontent, constants[const_index]) + endif + let const_index += 1 + endif + endfor - let int_dict = [] - for i in int_list - if int_vars[i] != '' - let class = ' ' - if int_vars[i] != '' - let class = i.' class ' - endif - let int_dict += [{'word':i, 'info':class.int_vars[i], 'kind':'v'}] - else - let int_dict += [{'word':i, 'kind':'v'}] + let all_values = {} + call extend(all_values, c_functions) + call extend(all_values, c_variables) + call extend(all_values, c_constants) + + for m in sort(keys(all_values)) + if stridx(m, a:base) == 0 + call add(res, m) + endif + endfor + + let start_list = res + + let final_list = [] + for i in start_list + let docblock = phpcomplete#ParseDocBlock(get(c_doc, i, '')) + if has_key(c_variables, i) + let final_list += + \ [{'word': i, + \ 'info':phpcomplete#FormatDocBlock(docblock), + \ 'menu':get(docblock.var, 'type', ''), + \ 'kind':'v'}] + elseif has_key(c_constants, i) + let info = phpcomplete#FormatDocBlock(docblock) + if info != '' + let info = "\n".info + endif + let final_list += + \ [{'word':i, + \ 'info':i.info, + \ 'menu':all_values[i], + \ 'kind':'d'}] + else + let return_type = get(docblock.return, 'type', '') + if return_type != '' + let return_type = ' | '.return_type + endif + let info = phpcomplete#FormatDocBlock(docblock) + if info != '' + let info = "\n".info + endif + let final_list += + \ [{'word':substitute(i, '.*::', '', ''), + \ 'info':i.all_values[i].')'.info, + \ 'menu':all_values[i].')'.return_type, + \ 'kind':'f'}] + endif + endfor + + return final_list +endfunction +" }}} + +function! phpcomplete#CompleteBuiltInClass(context, classname, base) " {{{ + let class_info = g:php_builtin_classes[tolower(a:classname)] + let res = [] + if a:context =~ '->$' " complete for everything instance related + " methods + for [method_name, method_info] in items(class_info.methods) + if a:base == '' || method_name =~? '^'.a:base + call add(res, {'word':method_name.'(', 'kind': 'f', 'menu': method_info.signature, 'info': method_info.signature }) + endif + endfor + " properties + for [property_name, property_info] in items(class_info.properties) + if a:base == '' || property_name =~? '^'.a:base + call add(res, {'word':property_name, 'kind': 'v', 'menu': property_info.type, 'info': property_info.type }) + endif + endfor + elseif a:context =~ '::$' " complete for everything static + " methods + for [method_name, method_info] in items(class_info.static_methods) + if a:base == '' || method_name =~? '^'.a:base + call add(res, {'word':method_name.'(', 'kind': 'f', 'menu': method_info.signature, 'info': method_info.signature }) + endif + endfor + " properties + for [property_name, property_info] in items(class_info.static_properties) + if a:base == '' || property_name =~? '^'.a:base + call add(res, {'word':property_name, 'kind': 'v', 'menu': property_info.type, 'info': property_info.type }) + endif + endfor + " constants + for [constant_name, constant_info] in items(class_info.constants) + if a:base == '' || constant_name =~? '^'.a:base + call add(res, {'word':constant_name, 'kind': 'd', 'menu': constant_info, 'info': constant_info}) endif endfor + endif + return res +endfunction +" }}} - return int_dict +function! phpcomplete#GetTaglist(pattern) " {{{ - else - " Complete everything else - - " + functions, DONE - " + keywords of language DONE - " + defines (constant definitions), DONE - " + extend keywords for predefined constants, DONE - " + classes (after new), DONE - " + limit choice after -> and :: to funcs and vars DONE - - " Internal solution for finding functions in current file. - let file = getline(1, '$') - call filter(file, - \ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("') - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let jfile = join(file, ' ') - let int_values = split(jfile, 'function\s\+') - let int_functions = {} - for i in int_values - let f_name = matchstr(i, - \ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') - let f_args = matchstr(i, - \ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\s*\zs.\{-}\ze\s*)\_s*{') - let int_functions[f_name.'('] = f_args.')' + let cache_checksum = '' + if g:phpcomplete_cache_taglists == 1 + " build a string with format of "<tagfile>:<mtime>$<tagfile2>:<mtime2>..." + " to validate that the tags are not changed since the time we saved the results in cache + for tagfile in sort(tagfiles()) + let cache_checksum .= fnamemodify(tagfile, ':p').':'.getftime(tagfile).'$' endfor - " Prepare list of functions from tags file - let ext_functions = {} - if fnames != '' - exe 'silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - " File name - let item = matchstr(field['text'], '^[^[:space:]]\+') - let fname = matchstr(field['text'], '\t\zs\f\+\ze') - let prototype = matchstr(field['text'], - \ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?') - let ext_functions[item.'('] = prototype.') - '.fname - endfor + if s:cache_tags_checksum != cache_checksum + " tag file(s) changed + " since we don't know where individual tags coming from when calling taglist() we zap the whole cache + " no way to clear only the entries originating from the changed tag file + let s:cache_tags = {} + endif + + if has_key(s:cache_tags, a:pattern) + return s:cache_tags[a:pattern] + endif + endif + + let tags = taglist(a:pattern) + let s:cache_tags[a:pattern] = tags + let has_key = has_key(s:cache_tags, a:pattern) + let s:cache_tags_checksum = cache_checksum + return tags +endfunction +" }}} + +function! phpcomplete#GetCurrentInstruction(line_number, col_number, phpbegin) " {{{ + " locate the current instruction (up until the previous non comment or string ";" or php region start (<?php or <?) without newlines + let col_number = a:col_number + let line_number = a:line_number + let line = getline(a:line_number) + let current_char = -1 + let instruction = '' + let parent_depth = 0 + let bracket_depth = 0 + let stop_chars = [ + \ '!', '@', '%', '^', '&', + \ '*', '/', '-', '+', '=', + \ ':', '>', '<', '.', '?', + \ ';', '(', '|', '[' + \ ] + + let phpbegin_length = len(matchstr(getline(a:phpbegin[0]), '\zs<?\(php\)\?\ze')) + let phpbegin_end = [a:phpbegin[0], a:phpbegin[1] - 1 + phpbegin_length] + + " will hold the first place where a coma could have ended the match + let first_coma_break_pos = -1 + let next_char = len(line) < col_number ? line[col_number + 1] : '' + + while !(line_number == 1 && col_number == 1) + if current_char != -1 + let next_char = current_char + endif + + let current_char = line[col_number] + let synIDName = synIDattr(synID(line_number, col_number + 1, 0), 'name') + + if col_number - 1 == -1 + let prev_line_number = line_number - 1 + let prev_line = getline(line_number - 1) + let prev_col_number = strlen(prev_line) + else + let prev_line_number = line_number + let prev_col_number = col_number - 1 + let prev_line = line + endif + let prev_char = prev_line[prev_col_number] + + " skip comments + if synIDName =~? 'comment\|phpDocTags' + let current_char = '' + endif + + " break on the last char of the "and" and "or" operators + if synIDName == 'phpOperator' && (current_char == 'r' || current_char == 'd') + break + endif + + " break on statements as "return" or "throws" + if synIDName == 'phpStatement' || synIDName == 'phpException' + break + endif + + " if the current char should be considered + if current_char != '' && parent_depth >= 0 && bracket_depth >= 0 && synIDName !~? 'comment\|string' + " break if we are on a "naked" stop_char (operators, colon, openparent...) + if index(stop_chars, current_char) != -1 + let do_break = 1 + " dont break does not look like a "->" + if (prev_char == '-' && current_char == '>') || (current_char == '-' && next_char == '>') + let do_break = 0 + endif + " dont break if its looks like a "::" + if (prev_char == ':' && current_char == ':') || (current_char == ':' && next_char == ':') + let do_break = 0 + endif + + if do_break + break + endif + endif + + " save the coma position for later use if theres a "naked" , possibly separating a parameter and it is not in a parented part + if first_coma_break_pos == -1 && current_char == ',' + let first_coma_break_pos = len(instruction) endif endif - " All functions - call extend(int_functions, ext_functions) - call extend(int_functions, g:php_builtin_functions) - - " Internal solution for finding constants in current file - let file = getline(1, '$') - call filter(file, 'v:val =~ "define\\s*("') - let jfile = join(file, ' ') - let int_values = split(jfile, 'define\s*(\s*') - let int_constants = {} - for i in int_values - let c_name = matchstr(i, '\(["'']\)\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze\1') - " let c_value = matchstr(i, - " \ '\(["'']\)[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\1\s*,\s*\zs.\{-}\ze\s*)') - if c_name != '' - let int_constants[c_name] = '' " c_value + " count nested darenthesis and brackets so we can tell if we need to break on a ';' or not (think of for (;;) loops) + if synIDName =~? 'phpBraceFunc\|phpParent\|Delimiter' + if current_char == '(' + let parent_depth += 1 + elseif current_char == ')' + let parent_depth -= 1 + + elseif current_char == '[' + let bracket_depth += 1 + elseif current_char == ']' + let bracket_depth -= 1 endif - endfor + endif - " Prepare list of constants from tags file - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let ext_constants = {} - if fnames != '' - exe 'silent! vimgrep /^'.a:base.'.*\td\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - let item = matchstr(field['text'], '^[^[:space:]]\+') - let ext_constants[item] = '' - endfor + " stop collecting chars if we see a function start { (think of first line in a function) + if (current_char == '{' || current_char == '}') && synIDName =~? 'phpBraceFunc\|phpParent\|Delimiter' + break + endif + + " break if we are reached the php block start (<?php or <?) + if [line_number, col_number] == phpbegin_end + break + endif + + let instruction = current_char.instruction + + " step a char or a line back if we are on the first column of the line already + let col_number -= 1 + if col_number == -1 + let line_number -= 1 + let line = getline(line_number) + let col_number = strlen(line) + endif + endwhile + + " strip leading whitespace + let instruction = substitute(instruction, '^\s\+', '', '') + + " there were a "naked" coma in the instruction + if first_coma_break_pos != -1 + if instruction !~? '^use' && instruction !~? '^class' " use ... statements and class delcarations should not be broken up by comas + let pos = (-1 * first_coma_break_pos) + 1 + let instruction = instruction[pos :] + endif + endif + + " HACK to remove one line conditionals from code like "if ($foo) echo 'bar'" + " what the plugin really need is a proper php tokenizer + if instruction =~? '\c^\(if\|while\|foreach\|for\)\s*(' + " clear everything up until the first ( + let instruction = substitute(instruction, '^\(if\|while\|foreach\|for\)\s*(\s*', '', '') + + " lets iterate trough the instruction until we can find the pair for the opening ( + let i = 0 + let depth = 1 + while i < len(instruction) + if instruction[i] == '(' + let depth += 1 endif + if instruction[i] == ')' + let depth -= 1 + endif + if depth == 0 + break + end + let i += 1 + endwhile + let instruction = instruction[i + 1 : len(instruction)] + endif + + " trim whitespace from the ends + let instruction = substitute(instruction, '\v^(^\s+)|(\s+)$', '', 'g') + + return instruction +endfunction " }}} + +function! phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, imports, methodstack) " {{{ + " Tries to get the classname and namespace for a chained method call like: + " $this->foo()->bar()->baz()-> + + let classname_candidate = a:classname_candidate + let class_candidate_namespace = a:class_candidate_namespace + let methodstack = a:methodstack + let unknown_result = ['', ''] + let prev_method_is_array = (methodstack[0] =~ '\v^[^([]+\[' ? 1 : 0) + let classname_candidate_is_array = (classname_candidate =~ '\[\]$' ? 1 : 0) + + if prev_method_is_array + if classname_candidate_is_array + let classname_candidate = substitute(classname_candidate, '\[\]$', '', '') + else + return unknown_result endif + endif - " All constants - call extend(int_constants, ext_constants) - " Treat keywords as constants + if (len(methodstack) == 1) + let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, a:imports) + return [classname_candidate, class_candidate_namespace] + else + call remove(methodstack, 0) + let method_is_array = (methodstack[0] =~ '\v^[^[]+\[' ? 1 : 0) + let method = matchstr(methodstack[0], '\v^\$*\zs[^[(]+\ze') + + let classlocation = phpcomplete#GetClassLocation(classname_candidate, class_candidate_namespace) + + if classlocation == 'VIMPHP_BUILTINOBJECT' && has_key(g:php_builtin_classes, tolower(classname_candidate)) + let class_info = g:php_builtin_classes[tolower(classname_candidate)] + if has_key(class_info['methods'], method) + return phpcomplete#GetCallChainReturnType(class_info['methods'][method].return_type, '\', a:imports, methodstack) + endif + if has_key(class_info['properties'], method) + return phpcomplete#GetCallChainReturnType(class_info['properties'][method].type, '\', a:imports, methodstack) + endif + if has_key(class_info['static_methods'], method) + return phpcomplete#GetCallChainReturnType(class_info['static_methods'][method].return_type, '\', a:imports, methodstack) + endif + if has_key(class_info['static_properties'], method) + return phpcomplete#GetCallChainReturnType(class_info['static_properties'][method].type, '\', a:imports, methodstack) + endif + + return unknown_result - let all_values = {} + elseif filereadable(classlocation) + " Read the next method from the stack and extract only the name - " One big dictionary of functions - call extend(all_values, int_functions) + let classcontents = phpcomplete#GetCachedClassContents(classlocation, classname_candidate) - " Add constants - call extend(all_values, int_constants) - " Add keywords - call extend(all_values, g:php_keywords) + " Get Structured information of all classes and subclasses including namespace and includes + " try to find the method's return type in docblock comment + for classstructure in classcontents + let doclock_target_pattern = 'function\s\+'.method.'\|\(public\|private\|protected\|var\).\+\$'.method + let doc_str = phpcomplete#GetDocBlock(split(classstructure.content, '\n'), doclock_target_pattern) + if doc_str != '' + break + endif + endfor + if doc_str != '' + let docblock = phpcomplete#ParseDocBlock(doc_str) + if has_key(docblock.return, 'type') || has_key(docblock.var, 'type') + let type = has_key(docblock.return, 'type') ? docblock.return.type : docblock.var.type + + " there's a namespace in the type, threat the type as FQCN + if type =~ '\\' + let parts = split(substitute(type, '^\\', '', ''), '\') + let class_candidate_namespace = join(parts[0:-2], '\') + let classname_candidate = parts[-1] + " check for renamed namepsace in imports + if has_key(classstructure.imports, class_candidate_namespace) + let class_candidate_namespace = classstructure.imports[class_candidate_namespace].name + endif + else + " no namespace in the type, threat it as a relative classname + let returnclass = type + if has_key(classstructure.imports, returnclass) + if has_key(classstructure.imports[returnclass], 'namespace') + let fullnamespace = classstructure.imports[returnclass].namespace + else + let fullnamespace = class_candidate_namespace + endif + else + let fullnamespace = class_candidate_namespace + endif + let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(returnclass, fullnamespace, a:imports) + endif - for m in sort(keys(all_values)) - if m =~ '^'.a:base - call add(res, m) + return phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, a:imports, methodstack) + endif endif - endfor - let int_list = res + return unknown_result + else + return unknown_result + endif + endif +endfunction " }}} + +function! phpcomplete#GetMethodStack(line) " {{{ + let methodstack = [] + let i = 0 + let end = len(a:line) - let final_list = [] - for i in int_list - if has_key(int_functions, i) - let final_list += - \ [{'word':i, - \ 'info':i.int_functions[i], - \ 'kind':'f'}] - elseif has_key(int_constants, i) - let final_list += [{'word':i, 'kind':'d'}] - else - let final_list += [{'word':i}] + let current_part = '' + + let parent_depth = 0 + let in_string = 0 + let string_start = '' + + let next_char = '' + + while i < end + let current_char = a:line[i] + let next_char = i + 1 < end ? a:line[i + 1] : '' + let prev_char = i >= 1 ? a:line[i - 1] : '' + let prev_prev_char = i >= 2 ? a:line[i - 2] : '' + + if in_string == 0 && parent_depth == 0 && ((current_char == '-' && next_char == '>') || (current_char == ':' && next_char == ':')) + call add(methodstack, current_part) + let current_part = '' + let i += 2 + continue + endif + + " if it's looks like a string + if current_char == "'" || current_char == '"' + " and it is not escaped + if prev_char != '\' || (prev_char == '\' && prev_prev_char == '\') + " and we are in a string already + if in_string + " and that string started with this char too + if current_char == string_start + " clear the string mark + let in_string = 0 + endif + else " ... and we are not in a string + " set the string mark + let in_string = 1 + let string_start = current_char + endif endif - endfor + endif - return final_list + if !in_string && a:line[i] == '(' + let parent_depth += 1 + endif + if !in_string && a:line[i] == ')' + let parent_depth -= 1 + endif + let current_part .= current_char + let i += 1 + endwhile + + " add the last remaining part, this can be an empty string and this is expected + " the empty string represents the completion base (which happen to be an empty string) + if current_part != '' + call add(methodstack, current_part) endif + return methodstack endfunction +" }}} -function! phpcomplete#GetClassName(scontext) " {{{ +function! phpcomplete#GetClassName(start_line, context, current_namespace, imports) " {{{ " Get class name " Class name can be detected in few ways: " @var $myVar class + " in the same line (php 5.4 (new Class)-> syntax) " line above " or line in tags file - let object = matchstr(a:scontext, '\zs[a-zA-Z_0-9\x7f-\xff]\+\ze->') + let class_name_pattern = '[a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*' + let function_name_pattern = '[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*' + let function_invocation_pattern = '[a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*(' + let variable_name_pattern = '\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' + + let classname_candidate = '' + let class_candidate_namespace = a:current_namespace + let class_candidate_imports = a:imports + let methodstack = phpcomplete#GetMethodStack(a:context) + + if a:context =~? '\$this->' || a:context =~? '\(self\|static\)::' || a:context =~? 'parent::' + let i = 1 + while i < a:start_line + let line = getline(a:start_line - i) + + " Don't complete self:: or $this if outside of a class + " (assumes correct indenting) + if line =~ '^}' + return '' + endif + + if line =~? '\v^\s*(abstract\s+|final\s+)*\s*class' + let class_name = matchstr(line, '\c\s*class\s*\zs'.class_name_pattern.'\ze') + let extended_class = matchstr(line, '\cclass\s\+'.class_name_pattern.'\s\+extends\s\+\zs'.class_name_pattern.'\ze') + + let classname_candidate = a:context =~? 'parent::' ? extended_class : class_name + else + let i += 1 + continue + endif + + if classname_candidate != '' + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, class_candidate_imports, methodstack) + " return absolute classname, without leading \ + return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate + endif + endwhile + elseif a:context =~? '(\s*new\s\+'.class_name_pattern.'\s*)->' + let classname_candidate = matchstr(a:context, '\cnew\s\+\zs'.class_name_pattern.'\ze') + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, class_candidate_imports, methodstack) + " return absolute classname, without leading \ + return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate + elseif get(methodstack, 0) =~# function_invocation_pattern + let function_name = matchstr(methodstack[0], '^\s*\zs'.function_name_pattern) + let function_file = phpcomplete#GetFunctionLocation(function_name, a:current_namespace) + + if function_file == 'VIMPHP_BUILTINFUNCTION' + " built in function, grab the return type from the info string + let return_type = matchstr(g:php_builtin_functions[function_name.'('], '\v\|\s+\zs.+$') + let classname_candidate = return_type + let class_candidate_namespace = '\' + else + let file_lines = readfile(function_file) + let docblock_str = phpcomplete#GetDocBlock(file_lines, 'function\s*\<'.function_name.'\>') + let docblock = phpcomplete#ParseDocBlock(docblock_str) + if has_key(docblock.return, 'type') + let classname_candidate = docblock.return.type + let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines) + " try to expand the classname of the returned type with the context got from the function's source file + + let [classname_candidate, unused] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports) + endif + endif + if classname_candidate != '' + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, class_candidate_imports, methodstack) + " return absolute classname, without leading \ + return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate + endif + else + " check Constant lookup + let constant_object = matchstr(a:context, '\zs'.class_name_pattern.'\ze::') + if constant_object != '' + let classname_candidate = constant_object + endif + + " extract the variable name from the context + let object = methodstack[0] + let object_is_array = (object =~ '\v^[^[]+\[' ? 1 : 0) + let object = matchstr(object, variable_name_pattern) + + " scan the file backwards from current line for explicit type declaration (@var $variable Classname) + let i = 1 " start from the current line - 1 + while i < a:start_line + let line = getline(a:start_line - i) + " in file lookup for /* @var $foo Class */ + if line =~# '@var\s\+'.object.'\s\+'.class_name_pattern + let classname_candidate = matchstr(line, '@var\s\+'.object.'\s\+\zs'.class_name_pattern.'\(\[\]\)\?') + break + elseif line !~ '^\s*$' + " type indicator comments should be next to the variable + " non empty lines break the search + break + endif + let i += 1 + endwhile + + if classname_candidate != '' + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, class_candidate_imports, methodstack) + " return absolute classname, without leading \ + return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate + endif + + " scan the file backwards from the current line + let i = 1 + while i < a:start_line + let line = getline(a:start_line - i) + + " do in-file lookup of $var = new Class + if line =~# '^\s*'.object.'\s*=\s*new\s\+'.class_name_pattern && !object_is_array + let classname_candidate = matchstr(line, object.'\c\s*=\s*new\s*\zs'.class_name_pattern.'\ze') + break + endif + + " in-file lookup for Class::getInstance() + if line =~# '^\s*'.object.'\s*=&\?\s*'.class_name_pattern.'\s*::\s*getInstance' && !object_is_array + let classname_candidate = matchstr(line, object.'\s*=&\?\s*\zs'.class_name_pattern.'\ze\s*::\s*getInstance') + break + endif + + " do in-file lookup for static method invocation of a built-in class, like: $d = DateTime::createFromFormat() + if line =~# '^\s*'.object.'\s*=&\?\s*'.class_name_pattern.'\s*::\s*$\?[a-zA-Z_0-9\x7f-\xff]\+' + let classname = matchstr(line, '^\s*'.object.'\s*=&\?\s*\zs'.class_name_pattern.'\ze\s*::') + if has_key(a:imports, classname) && a:imports[classname].kind == 'c' + let classname = a:imports[classname].name + endif + if has_key(g:php_builtin_classes, tolower(classname)) + let sub_methodstack = phpcomplete#GetMethodStack(matchstr(line, '^\s*'.object.'\s*=&\?\s*\s\+\zs.*')) + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(classname, '\', {}, sub_methodstack) + return classname_candidate + else + " try to get the class name from the static method's docblock + let [classname, namespace_for_class] = phpcomplete#ExpandClassName(classname, a:current_namespace, a:imports) + let sub_methodstack = phpcomplete#GetMethodStack(matchstr(line, '^\s*'.object.'\s*=&\?\s*\s\+\zs.*')) + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType( + \ classname, + \ a:current_namespace, + \ a:imports, + \ sub_methodstack) + return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate + endif + endif + + " in-file lookup for typehinted function arguments + " - the function can have a name or be anonymous (e.g., function qux() { ... } vs. function () { ... }) + " - the type-hinted argument can be anywhere in the arguments list. + if line =~? 'function\(\s\+'.function_name_pattern.'\)\?\s*(.\{-}'.class_name_pattern.'\s\+'.object && !object_is_array + let f_args = matchstr(line, '\cfunction\(\s\+'.function_name_pattern.'\)\?\s*(\zs.\{-}\ze)') + let args = split(f_args, '\s*\zs,\ze\s*') + for arg in args + if arg =~# object.'\(,\|$\)' + let classname_candidate = matchstr(arg, '\s*\zs'.class_name_pattern.'\ze\s\+'.object) + break + endif + endfor + if classname_candidate != '' + break + endif + endif + + " if we see a function declaration, try loading the docblock for it and look for matching @params + if line =~? 'function\(\s\+'.function_name_pattern.'\)\?\s*(.\{-}'.object + let match_line = substitute(line, '\\', '\\\\', 'g') + let sccontent = getline(0, a:start_line - i) + let doc_str = phpcomplete#GetDocBlock(sccontent, match_line) + if doc_str != '' + let docblock = phpcomplete#ParseDocBlock(doc_str) + for param in docblock.params + if param.name =~? object + let classname_candidate = matchstr(param.type, class_name_pattern.'\(\[\]\)\?') + break + endif + endfor + if classname_candidate != '' + break + endif + endif + endif + + " assignment for the variable in question with a variable on the right hand side + if line =~# '^\s*'.object.'\s*=&\?\s*'.variable_name_pattern + let tailing_semicolon = match(line, ';\s*$') + let tailing_semicolon = tailing_semicolon != -1 ? tailing_semicolon : strlen(getline(a:start_line - i)) + let prev_context = phpcomplete#GetCurrentInstruction(a:start_line - i, tailing_semicolon - 1, b:phpbegin) + let prev_class = phpcomplete#GetClassName(a:start_line - i, prev_context, a:current_namespace, a:imports) + + if stridx(prev_class, '\') != -1 + let classname_parts = split(prev_class, '\\\+') + let classname_candidate = classname_parts[-1] + let class_candidate_namespace = join(classname_parts[0:-2], '\') + else + let classname_candidate = prev_class + let class_candidate_namespace = '\' + endif + break + endif + + " assignment for the variable in question with a function on the right hand side + if line =~# '^\s*'.object.'\s*=&\?\s*'.function_invocation_pattern + let tailing_semicolon = match(line, ';\s*$') + let tailing_semicolon = tailing_semicolon != -1 ? tailing_semicolon : strlen(getline(a:start_line - i)) + let prev_context = phpcomplete#GetCurrentInstruction(a:start_line - i, tailing_semicolon - 1, b:phpbegin) + + let function_name = matchstr(prev_context, '^'.function_invocation_pattern.'\ze') + let function_name = matchstr(function_name, '^\zs.\+\ze\s*($') " strip the trailing ( + let [function_name, function_namespace] = phpcomplete#ExpandClassName(function_name, a:current_namespace, a:imports) + + let function_file = phpcomplete#GetFunctionLocation(function_name, function_namespace) + + if function_file == 'VIMPHP_BUILTINFUNCTION' + " built in function, grab the return type from the info string + let return_type = matchstr(g:php_builtin_functions[function_name.'('], '\v\|\s+\zs.+$') + let classname_candidate = return_type + let class_candidate_namespace = '\' + break + else + let file_lines = readfile(function_file) + let docblock_str = phpcomplete#GetDocBlock(file_lines, 'function\s*\<'.function_name.'\>') + let docblock = phpcomplete#ParseDocBlock(docblock_str) + if has_key(docblock.return, 'type') + let classname_candidate = docblock.return.type + let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines) + " try to expand the classname of the returned type with the context got from the function's source file + let [classname_candidate, unused] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports) + break + endif + endif + endif + + " foreach with the variable in question + if line =~? 'foreach\s*(.\{-}\s\+'.object.'\s*)' + let sub_context = matchstr(line, 'foreach\s*(\s*\zs.\{-}\ze\s\+as') + let prev_class = phpcomplete#GetClassName(a:start_line - i, sub_context, a:current_namespace, a:imports) + + " the iterated expression should return an array type + if prev_class =~ '\[\]$' + let prev_class = matchstr(prev_class, '\v^[^[]+') + else + return + endif + + if stridx(prev_class, '\') != -1 + let classname_parts = split(prev_class, '\\\+') + let classname_candidate = classname_parts[-1] + let class_candidate_namespace = join(classname_parts[0:-2], '\') + else + let classname_candidate = prev_class + let class_candidate_namespace = '\' + endif + break + endif + + " catch clause with the variable in question + if line =~? 'catch\s*(\zs'.class_name_pattern.'\ze\s\+'.object + let classname = matchstr(line, 'catch\s*(\zs'.class_name_pattern.'\ze\s\+'.object) + if stridx(classname, '\') != -1 + let classname_parts = split(classname, '\\\+') + let classname_candidate = classname_parts[-1] + let class_candidate_namespace = join(classname_parts[0:-2], '\') + else + let classname_candidate = classname + let class_candidate_namespace = '\' + endif + break + endif + + let i += 1 + endwhile + + if classname_candidate != '' + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, class_candidate_imports, methodstack) + " return absolute classname, without leading \ + return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate + endif + + " OK, first way failed, now check tags file(s) + " This method is useless when local variables are not indexed by ctags and + " pretty inaccurate even if it is + if g:phpcomplete_search_tags_for_variables + let tags = phpcomplete#GetTaglist('^'.substitute(object, '^\$', '', '')) + if len(tags) == 0 + return + else + for tag in tags + if tag.kind ==? 'v' && tag.cmd =~? '=\s*new\s\+\zs'.class_name_pattern.'\ze' + let classname = matchstr(tag.cmd, '=\s*new\s\+\zs'.class_name_pattern.'\ze') + return classname + endif + endfor + endif + endif + endif +endfunction +" }}} + +function! phpcomplete#GetClassLocation(classname, namespace) " {{{ + " Check classname may be name of built in object + if has_key(g:php_builtin_classes, tolower(a:classname)) && (a:namespace == '' || a:namespace == '\') + return 'VIMPHP_BUILTINOBJECT' + endif + + if a:namespace == '' || a:namespace == '\' + let search_namespace = '\' + else + let search_namespace = tolower(a:namespace) + endif + let [current_namespace, imports] = phpcomplete#GetCurrentNameSpace(getline(0, line('.'))) + + " do in-file lookup for class definition let i = 1 while i < line('.') let line = getline(line('.')-i) - if line =~ '^\s*\*\/\?\s*$' + if line =~? '^\s*\(abstract\s\+\|final\s\+\)*\s*class\s*'.a:classname.'\(\s\+\|$\)' && tolower(current_namespace) == search_namespace + return expand('%:p') + else let i += 1 continue - else - if line =~ '@var\s\+\$'.object.'\s\+[a-zA-Z_0-9\x7f-\xff]\+' - let classname = matchstr(line, '@var\s\+\$'.object.'\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+') - return classname - else - break - endif endif endwhile - " OK, first way failed, now check tags file(s) - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - exe 'silent! vimgrep /^'.object.'.*\$'.object.'.*=\s*new\s\+.*\tv\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) == 0 - return '' - else - " In all properly managed projects it should be one item list, even if it - " *is* longer we cannot solve conflicts, assume it is first element - let classname = matchstr(qflist[0]['text'], '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze') - return classname + " Get class location from tags + let no_namespace_candidate = '' + let tags = phpcomplete#GetTaglist('^'.a:classname.'$') + for tag in tags + if tag.kind == 'c' || tag.kind == 'i' + if !has_key(tag, 'namespace') + let no_namespace_candidate = tag.filename + else + if search_namespace == tolower(tag.namespace) + return tag.filename + endif + endif + endif + endfor + if no_namespace_candidate != '' + return no_namespace_candidate endif endfunction " }}} -function! phpcomplete#GetClassLocation(classname) " {{{ - " Check classname may be name of built in object - if !exists("g:php_omni_bi_classes") - let g:php_omni_bi_classes = {} - for i in keys(g:php_builtin_object_functions) - let g:php_omni_bi_classes[substitute(i, '::.*$', '', '')] = '' - endfor - endif - if has_key(g:php_omni_bi_classes, a:classname) - return 'VIMPHP_BUILTINOBJECT' + +function! phpcomplete#GetFunctionLocation(function_name, namespace) " {{{ + " builtin functions doesn't need explicit \ in front of them even in namespaces, + " aliased built-in function names are not handled + if has_key(g:php_builtin_functions, a:function_name.'(') + return 'VIMPHP_BUILTINFUNCTION' endif - " Get class location - for fname in tagfiles() - let fhead = fnamemodify(fname, ":h") - if fhead != '' - let psep = '/' " Note: slash is potential problem! - let fhead .= psep - endif - let fname = escape(fname, " \\") - exe 'silent! vimgrep /^'.a:classname.'.*\tc\(\t\|$\)/j '.fname - let qflist = getqflist() - " As in GetClassName we can manage only one element if it exists - if len(qflist) > 0 - let classlocation = matchstr(qflist[0]['text'], '\t\zs\f\+\ze\t') - else - return '' + " do in-file lookup for function definition + let i = 1 + let buffer_lines = getline(1, line('$')) + for line in buffer_lines + if line =~? '^\s*function\s\+'.a:function_name.'\s*(' + return expand('%:p') endif - " And only one class location - if classlocation != '' - let classlocation = fhead.classlocation - return classlocation - else - return '' + endfor + + + if a:namespace == '' || a:namespace == '\' + let search_namespace = '\' + else + let search_namespace = tolower(a:namespace) + endif + let no_namespace_candidate = '' + let tags = phpcomplete#GetTaglist('\c^'.a:function_name.'$') + + for tag in tags + if tag.kind == 'f' + if !has_key(tag, 'namespace') + let no_namespace_candidate = tag.filename + else + if search_namespace == tolower(tag.namespace) + return tag.filename + endif + endif endif endfor + if no_namespace_candidate != '' + return no_namespace_candidate + endif +endif endfunction " }}} -function! phpcomplete#GetClassContents(file, name) " {{{ - let cfile = join(a:file, "\n") +function! phpcomplete#GetCachedClassContents(classlocation, class_name) " {{{ + let full_file_path = fnamemodify(a:classlocation, ':p') + let cache_key = full_file_path.'#'.a:class_name.'#'.getftime(full_file_path) + + " try to read from the cache first + if has_key(s:cache_classstructures, cache_key) + let classcontents = s:cache_classstructures[cache_key] + " cached class contents can contain content from multiple files (superclasses) so we have to + " validate cached result's validness by the filemtimes used to create the cached value + let valid = 1 + for classstructure in classcontents + if getftime(classstructure.file) != classstructure.mtime + let valid = 0 + " we could break here, but the time required for checking probably worth + " the the memory we can free by checking every file in the cached hirearchy + call phpcomplete#ClearCachedClassContents(classstructure.file) + endif + endfor + + if valid + " cache hit, we found an entry for this file + class pair and every + " file in the response is also valid + return classcontents + else + " clear the outdated cached value from the cache store + call remove(s:cache_classstructures, cache_key) + call phpcomplete#ClearCachedClassContents(full_file_path) + + " fall trough for the read from files path + endif + else + call phpcomplete#ClearCachedClassContents(full_file_path) + endif + + " cache miss, fetch the content from the files itself + let classfile = readfile(a:classlocation) + let classcontents = phpcomplete#GetClassContentsStructure(full_file_path, classfile, a:class_name) + let s:cache_classstructures[cache_key] = classcontents + + return classcontents +endfunction " }}} + +function! phpcomplete#ClearCachedClassContents(full_file_path) " {{{ + for [cache_key, cached_value] in items(s:cache_classstructures) + if stridx(cache_key, a:full_file_path.'#') == 0 + call remove(s:cache_classstructures, cache_key) + endif + endfor +endfunction " }}} + +function! phpcomplete#GetClassContentsStructure(file_path, file_lines, class_name) " {{{ + " returns dictionary containing content, namespace and imports for the class and all parent classes. + " Example: + " [ + " { + " class: 'foo', + " content: '... class foo extends bar ... ', + " namespace: 'NS\Foo', + " imports : { ... }, + " file: '/foo.php', + " mtime: 42, + " }, + " { + " class: 'bar', + " content: '... class bar extends baz ... ', + " namespace: 'NS\Bar', + " imports : { ... } + " file: '/bar.php', + " mtime: 42, + " }, + " ... + " ] + " + let full_file_path = fnamemodify(a:file_path, ':p') + let class_name_pattern = '[a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*' + let cfile = join(a:file_lines, "\n") + let result = [] " We use new buffer and (later) normal! because " this is the most efficient way. The other way " is to go through the looong string looking for " matching {} - let original_window = winnr() - below 1new - 0put =cfile - call search('class\s\+'.a:name) + + " remember the window we started at + let phpcomplete_original_window = winnr() + + silent! below 1new + silent! 0put =cfile + call search('\(class\|interface\)\s\+'.a:class_name.'\(\>\|$\)') let cfline = line('.') + call search('{') + let endline = line('.') + + let content = join(getline(cfline, endline),"\n") " Catch extends - if getline('.') =~ 'extends' - let extends_class = matchstr(getline('.'), - \ 'class\s\+'.a:name.'\s\+extends\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze') + if content =~? 'extends' + let extends_class = matchstr(content, 'class\_s\+'.a:class_name.'\_s\+extends\_s\+\zs'.class_name_pattern.'\ze') else let extends_class = '' endif - call search('{') - normal! % - let classc = getline(cfline, ".") - let classcontent = join(classc, "\n") - - bw! % - " go back to where we started - exe original_window.'wincmd w' + call searchpair('{', '', '}', 'W') + let classcontent = join(getline(cfline, line('.')), "\n") + silent! bw! % + let [current_namespace, imports] = phpcomplete#GetCurrentNameSpace(a:file_lines[0:cfline]) + " go back to original window + exe phpcomplete_original_window.'wincmd w' + call add(result, { + \ 'class': a:class_name, + \ 'content': classcontent, + \ 'namespace': current_namespace, + \ 'imports': imports, + \ 'file': full_file_path, + \ 'mtime': getftime(full_file_path), + \ }) if extends_class != '' - let classlocation = phpcomplete#GetClassLocation(extends_class) + let [extends_class, namespace] = phpcomplete#ExpandClassName(extends_class, current_namespace, imports) + if namespace == '' + let namespace = '\' + endif + let classlocation = phpcomplete#GetClassLocation(extends_class, namespace) if filereadable(classlocation) - let classfile = readfile(classlocation) - let classcontent .= "\n".phpcomplete#GetClassContents(classfile, extends_class) + let full_file_path = fnamemodify(classlocation, ':p') + let result += phpcomplete#GetClassContentsStructure(full_file_path, readfile(full_file_path), extends_class) + elseif tolower(current_namespace) == tolower(namespace) + " try to find the declaration in the same file. + let result += phpcomplete#GetClassContentsStructure(full_file_path, a:file_lines, extends_class) endif endif - return classcontent + return result endfunction " }}} -function! phpcomplete#LoadData() " {{{ -" Keywords/reserved words, all other special things {{{ -" Later it is possible to add some help to values, or type of -" defined variable -let g:php_keywords = { -\ 'PHP_SELF':'', -\ 'argv':'', -\ 'argc':'', -\ 'GATEWAY_INTERFACE':'', -\ 'SERVER_ADDR':'', -\ 'SERVER_NAME':'', -\ 'SERVER_SOFTWARE':'', -\ 'SERVER_PROTOCOL':'', -\ 'REQUEST_METHOD':'', -\ 'REQUEST_TIME':'', -\ 'QUERY_STRING':'', -\ 'DOCUMENT_ROOT':'', -\ 'HTTP_ACCEPT':'', -\ 'HTTP_ACCEPT_CHARSET':'', -\ 'HTTP_ACCEPT_ENCODING':'', -\ 'HTTP_ACCEPT_LANGUAGE':'', -\ 'HTTP_CONNECTION':'', -\ 'HTTP_POST':'', -\ 'HTTP_REFERER':'', -\ 'HTTP_USER_AGENT':'', -\ 'HTTPS':'', -\ 'REMOTE_ADDR':'', -\ 'REMOTE_HOST':'', -\ 'REMOTE_PORT':'', -\ 'SCRIPT_FILENAME':'', -\ 'SERVER_ADMIN':'', -\ 'SERVER_PORT':'', -\ 'SERVER_SIGNATURE':'', -\ 'PATH_TRANSLATED':'', -\ 'SCRIPT_NAME':'', -\ 'REQUEST_URI':'', -\ 'PHP_AUTH_DIGEST':'', -\ 'PHP_AUTH_USER':'', -\ 'PHP_AUTH_PW':'', -\ 'AUTH_TYPE':'', -\ 'and':'', -\ 'or':'', -\ 'xor':'', -\ '__FILE__':'', -\ 'exception':'', -\ '__LINE__':'', -\ 'as':'', -\ 'break':'', -\ 'case':'', -\ 'class':'', -\ 'const':'', -\ 'continue':'', -\ 'declare':'', -\ 'default':'', -\ 'do':'', -\ 'echo':'', -\ 'else':'', -\ 'elseif':'', -\ 'enddeclare':'', -\ 'endfor':'', -\ 'endforeach':'', -\ 'endif':'', -\ 'endswitch':'', -\ 'endwhile':'', -\ 'extends':'', -\ 'for':'', -\ 'foreach':'', -\ 'function':'', -\ 'global':'', -\ 'if':'', -\ 'new':'', -\ 'static':'', -\ 'switch':'', -\ 'use':'', -\ 'var':'', -\ 'while':'', -\ '__FUNCTION__':'', -\ '__CLASS__':'', -\ '__METHOD__':'', -\ 'final':'', -\ 'php_user_filter':'', -\ 'interface':'', -\ 'implements':'', -\ 'public':'', -\ 'private':'', -\ 'protected':'', -\ 'abstract':'', -\ 'clone':'', -\ 'try':'', -\ 'catch':'', -\ 'throw':'', -\ 'cfunction':'', -\ 'old_function':'', -\ 'this':'', -\ 'PHP_VERSION': '', -\ 'PHP_OS': '', -\ 'PHP_SAPI': '', -\ 'PHP_EOL': '', -\ 'PHP_INT_MAX': '', -\ 'PHP_INT_SIZE': '', -\ 'DEFAULT_INCLUDE_PATH': '', -\ 'PEAR_INSTALL_DIR': '', -\ 'PEAR_EXTENSION_DIR': '', -\ 'PHP_EXTENSION_DIR': '', -\ 'PHP_PREFIX': '', -\ 'PHP_BINDIR': '', -\ 'PHP_LIBDIR': '', -\ 'PHP_DATADIR': '', -\ 'PHP_SYSCONFDIR': '', -\ 'PHP_LOCALSTATEDIR': '', -\ 'PHP_CONFIG_FILE_PATH': '', -\ 'PHP_CONFIG_FILE_SCAN_DIR': '', -\ 'PHP_SHLIB_SUFFIX': '', -\ 'PHP_OUTPUT_HANDLER_START': '', -\ 'PHP_OUTPUT_HANDLER_CONT': '', -\ 'PHP_OUTPUT_HANDLER_END': '', -\ 'E_ERROR': '', -\ 'E_WARNING': '', -\ 'E_PARSE': '', -\ 'E_NOTICE': '', -\ 'E_CORE_ERROR': '', -\ 'E_CORE_WARNING': '', -\ 'E_COMPILE_ERROR': '', -\ 'E_COMPILE_WARNING': '', -\ 'E_USER_ERROR': '', -\ 'E_USER_WARNING': '', -\ 'E_USER_NOTICE': '', -\ 'E_ALL': '', -\ 'E_STRICT': '', -\ '__COMPILER_HALT_OFFSET__': '', -\ 'EXTR_OVERWRITE': '', -\ 'EXTR_SKIP': '', -\ 'EXTR_PREFIX_SAME': '', -\ 'EXTR_PREFIX_ALL': '', -\ 'EXTR_PREFIX_INVALID': '', -\ 'EXTR_PREFIX_IF_EXISTS': '', -\ 'EXTR_IF_EXISTS': '', -\ 'SORT_ASC': '', -\ 'SORT_DESC': '', -\ 'SORT_REGULAR': '', -\ 'SORT_NUMERIC': '', -\ 'SORT_STRING': '', -\ 'CASE_LOWER': '', -\ 'CASE_UPPER': '', -\ 'COUNT_NORMAL': '', -\ 'COUNT_RECURSIVE': '', -\ 'ASSERT_ACTIVE': '', -\ 'ASSERT_CALLBACK': '', -\ 'ASSERT_BAIL': '', -\ 'ASSERT_WARNING': '', -\ 'ASSERT_QUIET_EVAL': '', -\ 'CONNECTION_ABORTED': '', -\ 'CONNECTION_NORMAL': '', -\ 'CONNECTION_TIMEOUT': '', -\ 'INI_USER': '', -\ 'INI_PERDIR': '', -\ 'INI_SYSTEM': '', -\ 'INI_ALL': '', -\ 'M_E': '', -\ 'M_LOG2E': '', -\ 'M_LOG10E': '', -\ 'M_LN2': '', -\ 'M_LN10': '', -\ 'M_PI': '', -\ 'M_PI_2': '', -\ 'M_PI_4': '', -\ 'M_1_PI': '', -\ 'M_2_PI': '', -\ 'M_2_SQRTPI': '', -\ 'M_SQRT2': '', -\ 'M_SQRT1_2': '', -\ 'CRYPT_SALT_LENGTH': '', -\ 'CRYPT_STD_DES': '', -\ 'CRYPT_EXT_DES': '', -\ 'CRYPT_MD5': '', -\ 'CRYPT_BLOWFISH': '', -\ 'DIRECTORY_SEPARATOR': '', -\ 'SEEK_SET': '', -\ 'SEEK_CUR': '', -\ 'SEEK_END': '', -\ 'LOCK_SH': '', -\ 'LOCK_EX': '', -\ 'LOCK_UN': '', -\ 'LOCK_NB': '', -\ 'HTML_SPECIALCHARS': '', -\ 'HTML_ENTITIES': '', -\ 'ENT_COMPAT': '', -\ 'ENT_QUOTES': '', -\ 'ENT_NOQUOTES': '', -\ 'INFO_GENERAL': '', -\ 'INFO_CREDITS': '', -\ 'INFO_CONFIGURATION': '', -\ 'INFO_MODULES': '', -\ 'INFO_ENVIRONMENT': '', -\ 'INFO_VARIABLES': '', -\ 'INFO_LICENSE': '', -\ 'INFO_ALL': '', -\ 'CREDITS_GROUP': '', -\ 'CREDITS_GENERAL': '', -\ 'CREDITS_SAPI': '', -\ 'CREDITS_MODULES': '', -\ 'CREDITS_DOCS': '', -\ 'CREDITS_FULLPAGE': '', -\ 'CREDITS_QA': '', -\ 'CREDITS_ALL': '', -\ 'STR_PAD_LEFT': '', -\ 'STR_PAD_RIGHT': '', -\ 'STR_PAD_BOTH': '', -\ 'PATHINFO_DIRNAME': '', -\ 'PATHINFO_BASENAME': '', -\ 'PATHINFO_EXTENSION': '', -\ 'PATH_SEPARATOR': '', -\ 'CHAR_MAX': '', -\ 'LC_CTYPE': '', -\ 'LC_NUMERIC': '', -\ 'LC_TIME': '', -\ 'LC_COLLATE': '', -\ 'LC_MONETARY': '', -\ 'LC_ALL': '', -\ 'LC_MESSAGES': '', -\ 'ABDAY_1': '', -\ 'ABDAY_2': '', -\ 'ABDAY_3': '', -\ 'ABDAY_4': '', -\ 'ABDAY_5': '', -\ 'ABDAY_6': '', -\ 'ABDAY_7': '', -\ 'DAY_1': '', -\ 'DAY_2': '', -\ 'DAY_3': '', -\ 'DAY_4': '', -\ 'DAY_5': '', -\ 'DAY_6': '', -\ 'DAY_7': '', -\ 'ABMON_1': '', -\ 'ABMON_2': '', -\ 'ABMON_3': '', -\ 'ABMON_4': '', -\ 'ABMON_5': '', -\ 'ABMON_6': '', -\ 'ABMON_7': '', -\ 'ABMON_8': '', -\ 'ABMON_9': '', -\ 'ABMON_10': '', -\ 'ABMON_11': '', -\ 'ABMON_12': '', -\ 'MON_1': '', -\ 'MON_2': '', -\ 'MON_3': '', -\ 'MON_4': '', -\ 'MON_5': '', -\ 'MON_6': '', -\ 'MON_7': '', -\ 'MON_8': '', -\ 'MON_9': '', -\ 'MON_10': '', -\ 'MON_11': '', -\ 'MON_12': '', -\ 'AM_STR': '', -\ 'PM_STR': '', -\ 'D_T_FMT': '', -\ 'D_FMT': '', -\ 'T_FMT': '', -\ 'T_FMT_AMPM': '', -\ 'ERA': '', -\ 'ERA_YEAR': '', -\ 'ERA_D_T_FMT': '', -\ 'ERA_D_FMT': '', -\ 'ERA_T_FMT': '', -\ 'ALT_DIGITS': '', -\ 'INT_CURR_SYMBOL': '', -\ 'CURRENCY_SYMBOL': '', -\ 'CRNCYSTR': '', -\ 'MON_DECIMAL_POINT': '', -\ 'MON_THOUSANDS_SEP': '', -\ 'MON_GROUPING': '', -\ 'POSITIVE_SIGN': '', -\ 'NEGATIVE_SIGN': '', -\ 'INT_FRAC_DIGITS': '', -\ 'FRAC_DIGITS': '', -\ 'P_CS_PRECEDES': '', -\ 'P_SEP_BY_SPACE': '', -\ 'N_CS_PRECEDES': '', -\ 'N_SEP_BY_SPACE': '', -\ 'P_SIGN_POSN': '', -\ 'N_SIGN_POSN': '', -\ 'DECIMAL_POINT': '', -\ 'RADIXCHAR': '', -\ 'THOUSANDS_SEP': '', -\ 'THOUSEP': '', -\ 'GROUPING': '', -\ 'YESEXPR': '', -\ 'NOEXPR': '', -\ 'YESSTR': '', -\ 'NOSTR': '', -\ 'CODESET': '', -\ 'LOG_EMERG': '', -\ 'LOG_ALERT': '', -\ 'LOG_CRIT': '', -\ 'LOG_ERR': '', -\ 'LOG_WARNING': '', -\ 'LOG_NOTICE': '', -\ 'LOG_INFO': '', -\ 'LOG_DEBUG': '', -\ 'LOG_KERN': '', -\ 'LOG_USER': '', -\ 'LOG_MAIL': '', -\ 'LOG_DAEMON': '', -\ 'LOG_AUTH': '', -\ 'LOG_SYSLOG': '', -\ 'LOG_LPR': '', -\ 'LOG_NEWS': '', -\ 'LOG_UUCP': '', -\ 'LOG_CRON': '', -\ 'LOG_AUTHPRIV': '', -\ 'LOG_LOCAL0': '', -\ 'LOG_LOCAL1': '', -\ 'LOG_LOCAL2': '', -\ 'LOG_LOCAL3': '', -\ 'LOG_LOCAL4': '', -\ 'LOG_LOCAL5': '', -\ 'LOG_LOCAL6': '', -\ 'LOG_LOCAL7': '', -\ 'LOG_PID': '', -\ 'LOG_CONS': '', -\ 'LOG_ODELAY': '', -\ 'LOG_NDELAY': '', -\ 'LOG_NOWAIT': '', -\ 'LOG_PERROR': '', -\ } +function! phpcomplete#GetClassContents(classlocation, class_name) " {{{ + let classcontents = phpcomplete#GetCachedClassContents(a:classlocation, a:class_name) + let result = [] + for classstructure in classcontents + call add(result, classstructure.content) + endfor + return join(result, "\n") +endfunction +" }}} + +function! phpcomplete#GetDocBlock(sccontent, search) " {{{ + let i = 0 + let l = 0 + let comment_start = -1 + let comment_end = -1 + let sccontent_len = len(a:sccontent) + + while (i < sccontent_len) + let line = a:sccontent[i] + " search for a function declaration + if line =~? a:search + let l = i - 1 + " start backward serch for the comment block + while l != 0 + let line = a:sccontent[l] + " if comment end found save line position and end search + if line =~? '^\s*\*/' + let comment_end = l + break + " ... or the line doesn't blank (only whitespace or nothing) end search + elseif line !~? '^\s*$' + break + endif + let l -= 1 + endwhile + " no comment found + if comment_end == -1 + return '' + end + + while l != 0 + let line = a:sccontent[l] + if line =~? '^\s*/\*\*' + let comment_start = l + break + endif + let l -= 1 + endwhile + " no docblock comment start found + if comment_start == -1 + return '' + end + + let comment_start += 1 " we dont need the /** + let comment_end -= 1 " we dont need the */ + + " remove leading whitespace and '*'s + let docblock = join(map(copy(a:sccontent[comment_start :comment_end]), 'substitute(v:val, "^\\s*\\*\\s*", "", "")'), "\n") + return docblock + endif + let i += 1 + endwhile + return '' +endfunction " }}} -" PHP builtin functions {{{ -" To create from scratch list of functions: -" 1. Download multi html file PHP documentation -" 2. run for i in `ls | grep "^function\."`; do grep -A4 Description $i >> funcs; done -" 3. Open funcs in Vim and -" a) g/Description/normal! 5J -" b) remove all html tags (it will require few s/// and g//) -" c) :%s/^\([^[:space:]]\+\) \([^[:space:]]\+\) ( \(.*\))/\\ '\2(': '\3| \1', -" This will create Dictionary -" d) remove all /^[^\\] lines -let g:php_builtin_functions = { -\ 'abs(': 'mixed number | number', -\ 'acosh(': 'float arg | float', -\ 'acos(': 'float arg | float', -\ 'addcslashes(': 'string str, string charlist | string', -\ 'addslashes(': 'string str | string', -\ 'aggregate(': 'object object, string class_name | void', -\ 'aggregate_info(': 'object object | array', -\ 'aggregate_methods_by_list(': 'object object, string class_name, array methods_list [, bool exclude] | void', -\ 'aggregate_methods_by_regexp(': 'object object, string class_name, string regexp [, bool exclude] | void', -\ 'aggregate_methods(': 'object object, string class_name | void', -\ 'aggregate_properties_by_list(': 'object object, string class_name, array properties_list [, bool exclude] | void', -\ 'aggregate_properties_by_regexp(': 'object object, string class_name, string regexp [, bool exclude] | void', -\ 'aggregate_properties(': 'object object, string class_name | void', -\ 'apache_child_terminate(': 'void | bool', -\ 'apache_getenv(': 'string variable [, bool walk_to_top] | string', -\ 'apache_get_modules(': 'void | array', -\ 'apache_get_version(': 'void | string', -\ 'apache_lookup_uri(': 'string filename | object', -\ 'apache_note(': 'string note_name [, string note_value] | string', -\ 'apache_request_headers(': 'void | array', -\ 'apache_reset_timeout(': 'void | bool', -\ 'apache_response_headers(': 'void | array', -\ 'apache_setenv(': 'string variable, string value [, bool walk_to_top] | bool', -\ 'apc_cache_info(': '[string cache_type] | array', -\ 'apc_clear_cache(': '[string cache_type] | bool', -\ 'apc_define_constants(': 'string key, array constants [, bool case_sensitive] | bool', -\ 'apc_delete(': 'string key | bool', -\ 'apc_fetch(': 'string key | mixed', -\ 'apc_load_constants(': 'string key [, bool case_sensitive] | bool', -\ 'apc_sma_info(': 'void | array', -\ 'apc_store(': 'string key, mixed var [, int ttl] | bool', -\ 'apd_breakpoint(': 'int debug_level | bool', -\ 'apd_callstack(': 'void | array', -\ 'apd_clunk(': 'string warning [, string delimiter] | void', -\ 'apd_continue(': 'int debug_level | bool', -\ 'apd_croak(': 'string warning [, string delimiter] | void', -\ 'apd_dump_function_table(': 'void | void', -\ 'apd_dump_persistent_resources(': 'void | array', -\ 'apd_dump_regular_resources(': 'void | array', -\ 'apd_echo(': 'string output | bool', -\ 'apd_get_active_symbols(': ' | array', -\ 'apd_set_pprof_trace(': '[string dump_directory] | void', -\ 'apd_set_session(': 'int debug_level | void', -\ 'apd_set_session_trace(': 'int debug_level [, string dump_directory] | void', -\ 'apd_set_socket_session_trace(': 'string ip_address_or_unix_socket_file, int socket_type, int port, int debug_level | bool', -\ 'array_change_key_case(': 'array input [, int case] | array', -\ 'array_chunk(': 'array input, int size [, bool preserve_keys] | array', -\ 'array_combine(': 'array keys, array values | array', -\ 'array_count_values(': 'array input | array', -\ 'array_diff_assoc(': 'array array1, array array2 [, array ...] | array', -\ 'array_diff(': 'array array1, array array2 [, array ...] | array', -\ 'array_diff_key(': 'array array1, array array2 [, array ...] | array', -\ 'array_diff_uassoc(': 'array array1, array array2 [, array ..., callback key_compare_func] | array', -\ 'array_diff_ukey(': 'array array1, array array2 [, array ..., callback key_compare_func] | array', -\ 'array_fill(': 'int start_index, int num, mixed value | array', -\ 'array_filter(': 'array input [, callback callback] | array', -\ 'array_flip(': 'array trans | array', -\ 'array(': '[mixed ...] | array', -\ 'array_intersect_assoc(': 'array array1, array array2 [, array ...] | array', -\ 'array_intersect(': 'array array1, array array2 [, array ...] | array', -\ 'array_intersect_key(': 'array array1, array array2 [, array ...] | array', -\ 'array_intersect_uassoc(': 'array array1, array array2 [, array ..., callback key_compare_func] | array', -\ 'array_intersect_ukey(': 'array array1, array array2 [, array ..., callback key_compare_func] | array', -\ 'array_key_exists(': 'mixed key, array search | bool', -\ 'array_keys(': 'array input [, mixed search_value [, bool strict]] | array', -\ 'array_map(': 'callback callback, array arr1 [, array ...] | array', -\ 'array_merge(': 'array array1 [, array array2 [, array ...]] | array', -\ 'array_merge_recursive(': 'array array1 [, array ...] | array', -\ 'array_multisort(': 'array ar1 [, mixed arg [, mixed ... [, array ...]]] | bool', -\ 'array_pad(': 'array input, int pad_size, mixed pad_value | array', -\ 'array_pop(': 'array &array | mixed', -\ 'array_product(': 'array array | number', -\ 'array_push(': 'array &array, mixed var [, mixed ...] | int', -\ 'array_rand(': 'array input [, int num_req] | mixed', -\ 'array_reduce(': 'array input, callback function [, int initial] | mixed', -\ 'array_reverse(': 'array array [, bool preserve_keys] | array', -\ 'array_search(': 'mixed needle, array haystack [, bool strict] | mixed', -\ 'array_shift(': 'array &array | mixed', -\ 'array_slice(': 'array array, int offset [, int length [, bool preserve_keys]] | array', -\ 'array_splice(': 'array &input, int offset [, int length [, array replacement]] | array', -\ 'array_sum(': 'array array | number', -\ 'array_udiff_assoc(': 'array array1, array array2 [, array ..., callback data_compare_func] | array', -\ 'array_udiff(': 'array array1, array array2 [, array ..., callback data_compare_func] | array', -\ 'array_udiff_uassoc(': 'array array1, array array2 [, array ..., callback data_compare_func, callback key_compare_func] | array', -\ 'array_uintersect_assoc(': 'array array1, array array2 [, array ..., callback data_compare_func] | array', -\ 'array_uintersect(': 'array array1, array array2 [, array ..., callback data_compare_func] | array', -\ 'array_uintersect_uassoc(': 'array array1, array array2 [, array ..., callback data_compare_func, callback key_compare_func] | array', -\ 'array_unique(': 'array array | array', -\ 'array_unshift(': 'array &array, mixed var [, mixed ...] | int', -\ 'array_values(': 'array input | array', -\ 'array_walk(': 'array &array, callback funcname [, mixed userdata] | bool', -\ 'array_walk_recursive(': 'array &input, callback funcname [, mixed userdata] | bool', -\ 'arsort(': 'array &array [, int sort_flags] | bool', -\ 'ascii2ebcdic(': 'string ascii_str | int', -\ 'asinh(': 'float arg | float', -\ 'asin(': 'float arg | float', -\ 'asort(': 'array &array [, int sort_flags] | bool', -\ 'aspell_check(': 'int dictionary_link, string word | bool', -\ 'aspell_check_raw(': 'int dictionary_link, string word | bool', -\ 'aspell_new(': 'string master [, string personal] | int', -\ 'aspell_suggest(': 'int dictionary_link, string word | array', -\ 'assert(': 'mixed assertion | bool', -\ 'assert_options(': 'int what [, mixed value] | mixed', -\ 'atan2(': 'float y, float x | float', -\ 'atanh(': 'float arg | float', -\ 'atan(': 'float arg | float', -\ 'base64_decode(': 'string encoded_data | string', -\ 'base64_encode(': 'string data | string', -\ 'base_convert(': 'string number, int frombase, int tobase | string', -\ 'basename(': 'string path [, string suffix] | string', -\ 'bcadd(': 'string left_operand, string right_operand [, int scale] | string', -\ 'bccomp(': 'string left_operand, string right_operand [, int scale] | int', -\ 'bcdiv(': 'string left_operand, string right_operand [, int scale] | string', -\ 'bcmod(': 'string left_operand, string modulus | string', -\ 'bcmul(': 'string left_operand, string right_operand [, int scale] | string', -\ 'bcompiler_load_exe(': 'string filename | bool', -\ 'bcompiler_load(': 'string filename | bool', -\ 'bcompiler_parse_class(': 'string class, string callback | bool', -\ 'bcompiler_read(': 'resource filehandle | bool', -\ 'bcompiler_write_class(': 'resource filehandle, string className [, string extends] | bool', -\ 'bcompiler_write_constant(': 'resource filehandle, string constantName | bool', -\ 'bcompiler_write_exe_footer(': 'resource filehandle, int startpos | bool', -\ 'bcompiler_write_file(': 'resource filehandle, string filename | bool', -\ 'bcompiler_write_footer(': 'resource filehandle | bool', -\ 'bcompiler_write_function(': 'resource filehandle, string functionName | bool', -\ 'bcompiler_write_functions_from_file(': 'resource filehandle, string fileName | bool', -\ 'bcompiler_write_header(': 'resource filehandle [, string write_ver] | bool', -\ 'bcpow(': 'string x, string y [, int scale] | string', -\ 'bcpowmod(': 'string x, string y, string modulus [, int scale] | string', -\ 'bcscale(': 'int scale | bool', -\ 'bcsqrt(': 'string operand [, int scale] | string', -\ 'bcsub(': 'string left_operand, string right_operand [, int scale] | string', -\ 'bin2hex(': 'string str | string', -\ 'bindec(': 'string binary_string | number', -\ 'bind_textdomain_codeset(': 'string domain, string codeset | string', -\ 'bindtextdomain(': 'string domain, string directory | string', -\ 'bzclose(': 'resource bz | int', -\ 'bzcompress(': 'string source [, int blocksize [, int workfactor]] | mixed', -\ 'bzdecompress(': 'string source [, int small] | mixed', -\ 'bzerrno(': 'resource bz | int', -\ 'bzerror(': 'resource bz | array', -\ 'bzerrstr(': 'resource bz | string', -\ 'bzflush(': 'resource bz | int', -\ 'bzopen(': 'string filename, string mode | resource', -\ 'bzread(': 'resource bz [, int length] | string', -\ 'bzwrite(': 'resource bz, string data [, int length] | int', -\ 'cal_days_in_month(': 'int calendar, int month, int year | int', -\ 'cal_from_jd(': 'int jd, int calendar | array', -\ 'cal_info(': '[int calendar] | array', -\ 'call_user_func_array(': 'callback function, array param_arr | mixed', -\ 'call_user_func(': 'callback function [, mixed parameter [, mixed ...]] | mixed', -\ 'call_user_method_array(': 'string method_name, object &obj, array paramarr | mixed', -\ 'call_user_method(': 'string method_name, object &obj [, mixed parameter [, mixed ...]] | mixed', -\ 'cal_to_jd(': 'int calendar, int month, int day, int year | int', -\ 'ccvs_add(': 'string session, string invoice, string argtype, string argval | string', -\ 'ccvs_auth(': 'string session, string invoice | string', -\ 'ccvs_command(': 'string session, string type, string argval | string', -\ 'ccvs_count(': 'string session, string type | int', -\ 'ccvs_delete(': 'string session, string invoice | string', -\ 'ccvs_done(': 'string sess | string', -\ 'ccvs_init(': 'string name | string', -\ 'ccvs_lookup(': 'string session, string invoice, int inum | string', -\ 'ccvs_new(': 'string session, string invoice | string', -\ 'ccvs_report(': 'string session, string type | string', -\ 'ccvs_return(': 'string session, string invoice | string', -\ 'ccvs_reverse(': 'string session, string invoice | string', -\ 'ccvs_sale(': 'string session, string invoice | string', -\ 'ccvs_status(': 'string session, string invoice | string', -\ 'ccvs_textvalue(': 'string session | string', -\ 'ccvs_void(': 'string session, string invoice | string', -\ 'ceil(': 'float value | float', -\ 'chdir(': 'string directory | bool', -\ 'checkdate(': 'int month, int day, int year | bool', -\ 'checkdnsrr(': 'string host [, string type] | int', -\ 'chgrp(': 'string filename, mixed group | bool', -\ 'chmod(': 'string filename, int mode | bool', -\ 'chown(': 'string filename, mixed user | bool', -\ 'chr(': 'int ascii | string', -\ 'chroot(': 'string directory | bool', -\ 'chunk_split(': 'string body [, int chunklen [, string end]] | string', -\ 'class_exists(': 'string class_name [, bool autoload] | bool', -\ 'class_implements(': 'mixed class [, bool autoload] | array', -\ 'classkit_import(': 'string filename | array', -\ 'classkit_method_add(': 'string classname, string methodname, string args, string code [, int flags] | bool', -\ 'classkit_method_copy(': 'string dClass, string dMethod, string sClass [, string sMethod] | bool', -\ 'classkit_method_redefine(': 'string classname, string methodname, string args, string code [, int flags] | bool', -\ 'classkit_method_remove(': 'string classname, string methodname | bool', -\ 'classkit_method_rename(': 'string classname, string methodname, string newname | bool', -\ 'class_parents(': 'mixed class [, bool autoload] | array', -\ 'clearstatcache(': 'void | void', -\ 'closedir(': 'resource dir_handle | void', -\ 'closelog(': 'void | bool', -\ 'com_addref(': 'void | void', -\ 'com_create_guid(': 'void | string', -\ 'com_event_sink(': 'variant comobject, object sinkobject [, mixed sinkinterface] | bool', -\ 'com_get_active_object(': 'string progid [, int code_page] | variant', -\ 'com_get(': 'resource com_object, string property | mixed', -\ 'com_invoke(': 'resource com_object, string function_name [, mixed function_parameters] | mixed', -\ 'com_isenum(': 'variant com_module | bool', -\ 'com_load(': 'string module_name [, string server_name [, int codepage]] | resource', -\ 'com_load_typelib(': 'string typelib_name [, bool case_insensitive] | bool', -\ 'com_message_pump(': '[int timeoutms] | bool', -\ 'compact(': 'mixed varname [, mixed ...] | array', -\ 'com_print_typeinfo(': 'object comobject [, string dispinterface [, bool wantsink]] | bool', -\ 'com_release(': 'void | void', -\ 'com_set(': 'resource com_object, string property, mixed value | void', -\ 'connection_aborted(': 'void | int', -\ 'connection_status(': 'void | int', -\ 'connection_timeout(': 'void | bool', -\ 'constant(': 'string name | mixed', -\ 'convert_cyr_string(': 'string str, string from, string to | string', -\ 'convert_uudecode(': 'string data | string', -\ 'convert_uuencode(': 'string data | string', -\ 'copy(': 'string source, string dest | bool', -\ 'cosh(': 'float arg | float', -\ 'cos(': 'float arg | float', -\ 'count_chars(': 'string string [, int mode] | mixed', -\ 'count(': 'mixed var [, int mode] | int', -\ 'cpdf_add_annotation(': 'int pdf_document, float llx, float lly, float urx, float ury, string title, string content [, int mode] | bool', -\ 'cpdf_add_outline(': 'int pdf_document, int lastoutline, int sublevel, int open, int pagenr, string text | int', -\ 'cpdf_arc(': 'int pdf_document, float x_coor, float y_coor, float radius, float start, float end [, int mode] | bool', -\ 'cpdf_begin_text(': 'int pdf_document | bool', -\ 'cpdf_circle(': 'int pdf_document, float x_coor, float y_coor, float radius [, int mode] | bool', -\ 'cpdf_clip(': 'int pdf_document | bool', -\ 'cpdf_close(': 'int pdf_document | bool', -\ 'cpdf_closepath_fill_stroke(': 'int pdf_document | bool', -\ 'cpdf_closepath(': 'int pdf_document | bool', -\ 'cpdf_closepath_stroke(': 'int pdf_document | bool', -\ 'cpdf_continue_text(': 'int pdf_document, string text | bool', -\ 'cpdf_curveto(': 'int pdf_document, float x1, float y1, float x2, float y2, float x3, float y3 [, int mode] | bool', -\ 'cpdf_end_text(': 'int pdf_document | bool', -\ 'cpdf_fill(': 'int pdf_document | bool', -\ 'cpdf_fill_stroke(': 'int pdf_document | bool', -\ 'cpdf_finalize(': 'int pdf_document | bool', -\ 'cpdf_finalize_page(': 'int pdf_document, int page_number | bool', -\ 'cpdf_global_set_document_limits(': 'int maxpages, int maxfonts, int maximages, int maxannotations, int maxobjects | bool', -\ 'cpdf_import_jpeg(': 'int pdf_document, string file_name, float x_coor, float y_coor, float angle, float width, float height, float x_scale, float y_scale, int gsave [, int mode] | bool', -\ 'cpdf_lineto(': 'int pdf_document, float x_coor, float y_coor [, int mode] | bool', -\ 'cpdf_moveto(': 'int pdf_document, float x_coor, float y_coor [, int mode] | bool', -\ 'cpdf_newpath(': 'int pdf_document | bool', -\ 'cpdf_open(': 'int compression [, string filename [, array doc_limits]] | int', -\ 'cpdf_output_buffer(': 'int pdf_document | bool', -\ 'cpdf_page_init(': 'int pdf_document, int page_number, int orientation, float height, float width [, float unit] | bool', -\ 'cpdf_place_inline_image(': 'int pdf_document, int image, float x_coor, float y_coor, float angle, float width, float height, int gsave [, int mode] | bool', -\ 'cpdf_rect(': 'int pdf_document, float x_coor, float y_coor, float width, float height [, int mode] | bool', -\ 'cpdf_restore(': 'int pdf_document | bool', -\ 'cpdf_rlineto(': 'int pdf_document, float x_coor, float y_coor [, int mode] | bool', -\ 'cpdf_rmoveto(': 'int pdf_document, float x_coor, float y_coor [, int mode] | bool', -\ 'cpdf_rotate(': 'int pdf_document, float angle | bool', -\ 'cpdf_rotate_text(': 'int pdfdoc, float angle | bool', -\ 'cpdf_save(': 'int pdf_document | bool', -\ 'cpdf_save_to_file(': 'int pdf_document, string filename | bool', -\ 'cpdf_scale(': 'int pdf_document, float x_scale, float y_scale | bool', -\ 'cpdf_set_action_url(': 'int pdfdoc, float xll, float yll, float xur, float xur, string url [, int mode] | bool', -\ 'cpdf_set_char_spacing(': 'int pdf_document, float space | bool', -\ 'cpdf_set_creator(': 'int pdf_document, string creator | bool', -\ 'cpdf_set_current_page(': 'int pdf_document, int page_number | bool', -\ 'cpdf_setdash(': 'int pdf_document, float white, float black | bool', -\ 'cpdf_setflat(': 'int pdf_document, float value | bool', -\ 'cpdf_set_font_directories(': 'int pdfdoc, string pfmdir, string pfbdir | bool', -\ 'cpdf_set_font(': 'int pdf_document, string font_name, float size, string encoding | bool', -\ 'cpdf_set_font_map_file(': 'int pdfdoc, string filename | bool', -\ 'cpdf_setgray_fill(': 'int pdf_document, float value | bool', -\ 'cpdf_setgray(': 'int pdf_document, float gray_value | bool', -\ 'cpdf_setgray_stroke(': 'int pdf_document, float gray_value | bool', -\ 'cpdf_set_horiz_scaling(': 'int pdf_document, float scale | bool', -\ 'cpdf_set_keywords(': 'int pdf_document, string keywords | bool', -\ 'cpdf_set_leading(': 'int pdf_document, float distance | bool', -\ 'cpdf_setlinecap(': 'int pdf_document, int value | bool', -\ 'cpdf_setlinejoin(': 'int pdf_document, int value | bool', -\ 'cpdf_setlinewidth(': 'int pdf_document, float width | bool', -\ 'cpdf_setmiterlimit(': 'int pdf_document, float value | bool', -\ 'cpdf_set_page_animation(': 'int pdf_document, int transition, float duration, float direction, int orientation, int inout | bool', -\ 'cpdf_setrgbcolor_fill(': 'int pdf_document, float red_value, float green_value, float blue_value | bool', -\ 'cpdf_setrgbcolor(': 'int pdf_document, float red_value, float green_value, float blue_value | bool', -\ 'cpdf_setrgbcolor_stroke(': 'int pdf_document, float red_value, float green_value, float blue_value | bool', -\ 'cpdf_set_subject(': 'int pdf_document, string subject | bool', -\ 'cpdf_set_text_matrix(': 'int pdf_document, array matrix | bool', -\ 'cpdf_set_text_pos(': 'int pdf_document, float x_coor, float y_coor [, int mode] | bool', -\ 'cpdf_set_text_rendering(': 'int pdf_document, int rendermode | bool', -\ 'cpdf_set_text_rise(': 'int pdf_document, float value | bool', -\ 'cpdf_set_title(': 'int pdf_document, string title | bool', -\ 'cpdf_set_viewer_preferences(': 'int pdfdoc, array preferences | bool', -\ 'cpdf_set_word_spacing(': 'int pdf_document, float space | bool', -\ 'cpdf_show(': 'int pdf_document, string text | bool', -\ 'cpdf_show_xy(': 'int pdf_document, string text, float x_coor, float y_coor [, int mode] | bool', -\ 'cpdf_stringwidth(': 'int pdf_document, string text | float', -\ 'cpdf_stroke(': 'int pdf_document | bool', -\ 'cpdf_text(': 'int pdf_document, string text [, float x_coor, float y_coor [, int mode [, float orientation [, int alignmode]]]] | bool', -\ 'cpdf_translate(': 'int pdf_document, float x_coor, float y_coor | bool', -\ 'crack_check(': 'resource dictionary, string password | bool', -\ 'crack_closedict(': '[resource dictionary] | bool', -\ 'crack_getlastmessage(': 'void | string', -\ 'crack_opendict(': 'string dictionary | resource', -\ 'crc32(': 'string str | int', -\ 'create_function(': 'string args, string code | string', -\ 'crypt(': 'string str [, string salt] | string', -\ 'ctype_alnum(': 'string text | bool', -\ 'ctype_alpha(': 'string text | bool', -\ 'ctype_cntrl(': 'string text | bool', -\ 'ctype_digit(': 'string text | bool', -\ 'ctype_graph(': 'string text | bool', -\ 'ctype_lower(': 'string text | bool', -\ 'ctype_print(': 'string text | bool', -\ 'ctype_punct(': 'string text | bool', -\ 'ctype_space(': 'string text | bool', -\ 'ctype_upper(': 'string text | bool', -\ 'ctype_xdigit(': 'string text | bool', -\ 'curl_close(': 'resource ch | void', -\ 'curl_copy_handle(': 'resource ch | resource', -\ 'curl_errno(': 'resource ch | int', -\ 'curl_error(': 'resource ch | string', -\ 'curl_exec(': 'resource ch | mixed', -\ 'curl_getinfo(': 'resource ch [, int opt] | mixed', -\ 'curl_init(': '[string url] | resource', -\ 'curl_multi_add_handle(': 'resource mh, resource ch | int', -\ 'curl_multi_close(': 'resource mh | void', -\ 'curl_multi_exec(': 'resource mh, int &still_running | int', -\ 'curl_multi_getcontent(': 'resource ch | string', -\ 'curl_multi_info_read(': 'resource mh | array', -\ 'curl_multi_init(': 'void | resource', -\ 'curl_multi_remove_handle(': 'resource mh, resource ch | int', -\ 'curl_multi_select(': 'resource mh [, float timeout] | int', -\ 'curl_setopt(': 'resource ch, int option, mixed value | bool', -\ 'curl_version(': '[int version] | array', -\ 'current(': 'array &array | mixed', -\ 'cybercash_base64_decode(': 'string inbuff | string', -\ 'cybercash_base64_encode(': 'string inbuff | string', -\ 'cybercash_decr(': 'string wmk, string sk, string inbuff | array', -\ 'cybercash_encr(': 'string wmk, string sk, string inbuff | array', -\ 'cybermut_creerformulairecm(': 'string url_cm, string version, string tpe, string price, string ref_command, string text_free, string url_return, string url_return_ok, string url_return_err, string language, string code_company, string text_button | string', -\ 'cybermut_creerreponsecm(': 'string sentence | string', -\ 'cybermut_testmac(': 'string code_mac, string version, string tpe, string cdate, string price, string ref_command, string text_free, string code_return | bool', -\ 'cyrus_authenticate(': 'resource connection [, string mechlist [, string service [, string user [, int minssf [, int maxssf [, string authname [, string password]]]]]]] | void', -\ 'cyrus_bind(': 'resource connection, array callbacks | bool', -\ 'cyrus_close(': 'resource connection | bool', -\ 'cyrus_connect(': '[string host [, string port [, int flags]]] | resource', -\ 'cyrus_query(': 'resource connection, string query | array', -\ 'cyrus_unbind(': 'resource connection, string trigger_name | bool', -\ 'date_default_timezone_get(': 'void | string', -\ 'date_default_timezone_set(': 'string timezone_identifier | bool', -\ 'date(': 'string format [, int timestamp] | string', -\ 'date_sunrise(': 'int timestamp [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]] | mixed', -\ 'date_sunset(': 'int timestamp [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]] | mixed', -\ 'db2_autocommit(': 'resource connection [, bool value] | mixed', -\ 'db2_bind_param(': 'resource stmt, int parameter-number, string variable-name [, int parameter-type [, int data-type [, int precision [, int scale]]]] | bool', -\ 'db2_client_info(': 'resource connection | object', -\ 'db2_close(': 'resource connection | bool', -\ 'db2_column_privileges(': 'resource connection [, string qualifier [, string schema [, string table-name [, string column-name]]]] | resource', -\ 'db2_columns(': 'resource connection [, string qualifier [, string schema [, string table-name [, string column-name]]]] | resource', -\ 'db2_commit(': 'resource connection | bool', -\ 'db2_connect(': 'string database, string username, string password [, array options] | resource', -\ 'db2_conn_error(': '[resource connection] | string', -\ 'db2_conn_errormsg(': '[resource connection] | string', -\ 'db2_cursor_type(': 'resource stmt | int', -\ 'db2_exec(': 'resource connection, string statement [, array options] | resource', -\ 'db2_execute(': 'resource stmt [, array parameters] | bool', -\ 'db2_fetch_array(': 'resource stmt [, int row_number] | array', -\ 'db2_fetch_assoc(': 'resource stmt [, int row_number] | array', -\ 'db2_fetch_both(': 'resource stmt [, int row_number] | array', -\ 'db2_fetch_object(': 'resource stmt [, int row_number] | object', -\ 'db2_fetch_row(': 'resource stmt [, int row_number] | bool', -\ 'db2_field_display_size(': 'resource stmt, mixed column | int', -\ 'db2_field_name(': 'resource stmt, mixed column | string', -\ 'db2_field_num(': 'resource stmt, mixed column | int', -\ 'db2_field_precision(': 'resource stmt, mixed column | int', -\ 'db2_field_scale(': 'resource stmt, mixed column | int', -\ 'db2_field_type(': 'resource stmt, mixed column | string', -\ 'db2_field_width(': 'resource stmt, mixed column | int', -\ 'db2_foreign_keys(': 'resource connection, string qualifier, string schema, string table-name | resource', -\ 'db2_free_result(': 'resource stmt | bool', -\ 'db2_free_stmt(': 'resource stmt | bool', -\ 'db2_next_result(': 'resource stmt | resource', -\ 'db2_num_fields(': 'resource stmt | int', -\ 'db2_num_rows(': 'resource stmt | int', -\ 'db2_pconnect(': 'string database, string username, string password [, array options] | resource', -\ 'db2_prepare(': 'resource connection, string statement [, array options] | resource', -\ 'db2_primary_keys(': 'resource connection, string qualifier, string schema, string table-name | resource', -\ 'db2_procedure_columns(': 'resource connection, string qualifier, string schema, string procedure, string parameter | resource', -\ 'db2_procedures(': 'resource connection, string qualifier, string schema, string procedure | resource', -\ 'db2_result(': 'resource stmt, mixed column | mixed', -\ 'db2_rollback(': 'resource connection | bool', -\ 'db2_server_info(': 'resource connection | object', -\ 'db2_special_columns(': 'resource connection, string qualifier, string schema, string table_name, int scope | resource', -\ 'db2_statistics(': 'resource connection, string qualifier, string schema, string table-name, bool unique | resource', -\ 'db2_stmt_error(': '[resource stmt] | string', -\ 'db2_stmt_errormsg(': '[resource stmt] | string', -\ 'db2_table_privileges(': 'resource connection [, string qualifier [, string schema [, string table_name]]] | resource', -\ 'db2_tables(': 'resource connection [, string qualifier [, string schema [, string table-name [, string table-type]]]] | resource', -\ 'dba_close(': 'resource handle | void', -\ 'dba_delete(': 'string key, resource handle | bool', -\ 'dba_exists(': 'string key, resource handle | bool', -\ 'dba_fetch(': 'string key, resource handle | string', -\ 'dba_firstkey(': 'resource handle | string', -\ 'dba_handlers(': '[bool full_info] | array', -\ 'dba_insert(': 'string key, string value, resource handle | bool', -\ 'dba_key_split(': 'mixed key | mixed', -\ 'dba_list(': 'void | array', -\ 'dba_nextkey(': 'resource handle | string', -\ 'dba_open(': 'string path, string mode [, string handler [, mixed ...]] | resource', -\ 'dba_optimize(': 'resource handle | bool', -\ 'dba_popen(': 'string path, string mode [, string handler [, mixed ...]] | resource', -\ 'dba_replace(': 'string key, string value, resource handle | bool', -\ 'dbase_add_record(': 'int dbase_identifier, array record | bool', -\ 'dbase_close(': 'int dbase_identifier | bool', -\ 'dbase_create(': 'string filename, array fields | int', -\ 'dbase_delete_record(': 'int dbase_identifier, int record_number | bool', -\ 'dbase_get_header_info(': 'int dbase_identifier | array', -\ 'dbase_get_record(': 'int dbase_identifier, int record_number | array', -\ 'dbase_get_record_with_names(': 'int dbase_identifier, int record_number | array', -\ 'dbase_numfields(': 'int dbase_identifier | int', -\ 'dbase_numrecords(': 'int dbase_identifier | int', -\ 'dbase_open(': 'string filename, int mode | int', -\ 'dbase_pack(': 'int dbase_identifier | bool', -\ 'dbase_replace_record(': 'int dbase_identifier, array record, int record_number | bool', -\ 'dba_sync(': 'resource handle | bool', -\ 'dblist(': 'void | string', -\ 'dbmclose(': 'resource dbm_identifier | bool', -\ 'dbmdelete(': 'resource dbm_identifier, string key | bool', -\ 'dbmexists(': 'resource dbm_identifier, string key | bool', -\ 'dbmfetch(': 'resource dbm_identifier, string key | string', -\ 'dbmfirstkey(': 'resource dbm_identifier | string', -\ 'dbminsert(': 'resource dbm_identifier, string key, string value | int', -\ 'dbmnextkey(': 'resource dbm_identifier, string key | string', -\ 'dbmopen(': 'string filename, string flags | resource', -\ 'dbmreplace(': 'resource dbm_identifier, string key, string value | int', -\ 'dbplus_add(': 'resource relation, array tuple | int', -\ 'dbplus_aql(': 'string query [, string server [, string dbpath]] | resource', -\ 'dbplus_chdir(': '[string newdir] | string', -\ 'dbplus_close(': 'resource relation | mixed', -\ 'dbplus_curr(': 'resource relation, array &tuple | int', -\ 'dbplus_errcode(': '[int errno] | string', -\ 'dbplus_errno(': 'void | int', -\ 'dbplus_find(': 'resource relation, array constraints, mixed tuple | int', -\ 'dbplus_first(': 'resource relation, array &tuple | int', -\ 'dbplus_flush(': 'resource relation | int', -\ 'dbplus_freealllocks(': 'void | int', -\ 'dbplus_freelock(': 'resource relation, string tname | int', -\ 'dbplus_freerlocks(': 'resource relation | int', -\ 'dbplus_getlock(': 'resource relation, string tname | int', -\ 'dbplus_getunique(': 'resource relation, int uniqueid | int', -\ 'dbplus_info(': 'resource relation, string key, array &result | int', -\ 'dbplus_last(': 'resource relation, array &tuple | int', -\ 'dbplus_lockrel(': 'resource relation | int', -\ 'dbplus_next(': 'resource relation, array &tuple | int', -\ 'dbplus_open(': 'string name | resource', -\ 'dbplus_prev(': 'resource relation, array &tuple | int', -\ 'dbplus_rchperm(': 'resource relation, int mask, string user, string group | int', -\ 'dbplus_rcreate(': 'string name, mixed domlist [, bool overwrite] | resource', -\ 'dbplus_rcrtexact(': 'string name, resource relation [, bool overwrite] | mixed', -\ 'dbplus_rcrtlike(': 'string name, resource relation [, int overwrite] | mixed', -\ 'dbplus_resolve(': 'string relation_name | array', -\ 'dbplus_restorepos(': 'resource relation, array tuple | int', -\ 'dbplus_rkeys(': 'resource relation, mixed domlist | mixed', -\ 'dbplus_ropen(': 'string name | resource', -\ 'dbplus_rquery(': 'string query [, string dbpath] | resource', -\ 'dbplus_rrename(': 'resource relation, string name | int', -\ 'dbplus_rsecindex(': 'resource relation, mixed domlist, int type | mixed', -\ 'dbplus_runlink(': 'resource relation | int', -\ 'dbplus_rzap(': 'resource relation | int', -\ 'dbplus_savepos(': 'resource relation | int', -\ 'dbplus_setindexbynumber(': 'resource relation, int idx_number | int', -\ 'dbplus_setindex(': 'resource relation, string idx_name | int', -\ 'dbplus_sql(': 'string query [, string server [, string dbpath]] | resource', -\ 'dbplus_tcl(': 'int sid, string script | string', -\ 'dbplus_tremove(': 'resource relation, array tuple [, array &current] | int', -\ 'dbplus_undo(': 'resource relation | int', -\ 'dbplus_undoprepare(': 'resource relation | int', -\ 'dbplus_unlockrel(': 'resource relation | int', -\ 'dbplus_unselect(': 'resource relation | int', -\ 'dbplus_update(': 'resource relation, array old, array new | int', -\ 'dbplus_xlockrel(': 'resource relation | int', -\ 'dbplus_xunlockrel(': 'resource relation | int', -\ 'dbx_close(': 'object link_identifier | bool', -\ 'dbx_compare(': 'array row_a, array row_b, string column_key [, int flags] | int', -\ 'dbx_connect(': 'mixed module, string host, string database, string username, string password [, int persistent] | object', -\ 'dbx_error(': 'object link_identifier | string', -\ 'dbx_escape_string(': 'object link_identifier, string text | string', -\ 'dbx_fetch_row(': 'object result_identifier | mixed', -\ 'dbx_query(': 'object link_identifier, string sql_statement [, int flags] | mixed', -\ 'dbx_sort(': 'object result, string user_compare_function | bool', -\ 'dcgettext(': 'string domain, string message, int category | string', -\ 'dcngettext(': 'string domain, string msgid1, string msgid2, int n, int category | string', -\ 'deaggregate(': 'object object [, string class_name] | void', -\ 'debug_backtrace(': 'void | array', -\ 'debugger_off(': 'void | int', -\ 'debugger_on(': 'string address | int', -\ 'debug_print_backtrace(': 'void | void', -\ 'debug_zval_dump(': 'mixed variable | void', -\ 'decbin(': 'int number | string', -\ 'dechex(': 'int number | string', -\ 'decoct(': 'int number | string', -\ 'defined(': 'string name | bool', -\ 'define(': 'string name, mixed value [, bool case_insensitive] | bool', -\ 'define_syslog_variables(': 'void | void', -\ 'deg2rad(': 'float number | float', -\ 'delete(': 'string file | void', -\ 'dgettext(': 'string domain, string message | string', -\ 'dio_close(': 'resource fd | void', -\ 'dio_fcntl(': 'resource fd, int cmd [, mixed args] | mixed', -\ 'dio_open(': 'string filename, int flags [, int mode] | resource', -\ 'dio_read(': 'resource fd [, int len] | string', -\ 'dio_seek(': 'resource fd, int pos [, int whence] | int', -\ 'dio_stat(': 'resource fd | array', -\ 'dio_tcsetattr(': 'resource fd, array options | bool', -\ 'dio_truncate(': 'resource fd, int offset | bool', -\ 'dio_write(': 'resource fd, string data [, int len] | int', -\ 'dirname(': 'string path | string', -\ 'disk_free_space(': 'string directory | float', -\ 'disk_total_space(': 'string directory | float', -\ 'dl(': 'string library | int', -\ 'dngettext(': 'string domain, string msgid1, string msgid2, int n | string', -\ 'dns_check_record(': 'string host [, string type] | bool', -\ 'dns_get_mx(': 'string hostname, array &mxhosts [, array &weight] | bool', -\ 'dns_get_record(': 'string hostname [, int type [, array &authns, array &addtl]] | array', -\ 'DomDocument->add_root(': 'string name | domelement', -\ 'DomDocument->create_attribute(': 'string name, string value | domattribute', -\ 'DomDocument->create_cdata_section(': 'string content | domcdata', -\ 'DomDocument->create_comment(': 'string content | domcomment', -\ 'DomDocument->create_element(': 'string name | domelement', -\ 'DomDocument->create_element_ns(': 'string uri, string name [, string prefix] | domelement', -\ 'DomDocument->create_entity_reference(': 'string content | domentityreference', -\ 'DomDocument->create_processing_instruction(': 'string content | domprocessinginstruction', -\ 'DomDocument->create_text_node(': 'string content | domtext', -\ 'DomDocument->doctype(': 'void | domdocumenttype', -\ 'DomDocument->document_element(': 'void | domelement', -\ 'DomDocument->dump_file(': 'string filename [, bool compressionmode [, bool format]] | string', -\ 'DomDocument->dump_mem(': '[bool format [, string encoding]] | string', -\ 'DomDocument->get_element_by_id(': 'string id | domelement', -\ 'DomDocument->get_elements_by_tagname(': 'string name | array', -\ 'DomDocument->html_dump_mem(': 'void | string', -\ 'DomDocument->xinclude(': 'void | int', -\ 'dom_import_simplexml(': 'SimpleXMLElement node | DOMElement', -\ 'DomNode->append_sibling(': 'domelement newnode | domelement', -\ 'DomNode->attributes(': 'void | array', -\ 'DomNode->child_nodes(': 'void | array', -\ 'DomNode->clone_node(': 'void | domelement', -\ 'DomNode->dump_node(': 'void | string', -\ 'DomNode->first_child(': 'void | domelement', -\ 'DomNode->get_content(': 'void | string', -\ 'DomNode->has_attributes(': 'void | bool', -\ 'DomNode->has_child_nodes(': 'void | bool', -\ 'DomNode->insert_before(': 'domelement newnode, domelement refnode | domelement', -\ 'DomNode->is_blank_node(': 'void | bool', -\ 'DomNode->last_child(': 'void | domelement', -\ 'DomNode->next_sibling(': 'void | domelement', -\ 'DomNode->node_name(': 'void | string', -\ 'DomNode->node_type(': 'void | int', -\ 'DomNode->node_value(': 'void | string', -\ 'DomNode->owner_document(': 'void | domdocument', -\ 'DomNode->parent_node(': 'void | domnode', -\ 'DomNode->prefix(': 'void | string', -\ 'DomNode->previous_sibling(': 'void | domelement', -\ 'DomNode->remove_child(': 'domtext oldchild | domtext', -\ 'DomNode->replace_child(': 'domelement oldnode, domelement newnode | domelement', -\ 'DomNode->replace_node(': 'domelement newnode | domelement', -\ 'DomNode->set_content(': 'string content | bool', -\ 'DomNode->set_name(': 'void | bool', -\ 'DomNode->set_namespace(': 'string uri [, string prefix] | void', -\ 'DomNode->unlink_node(': 'void | void', -\ 'domxml_new_doc(': 'string version | DomDocument', -\ 'domxml_open_file(': 'string filename [, int mode [, array &error]] | DomDocument', -\ 'domxml_open_mem(': 'string str [, int mode [, array &error]] | DomDocument', -\ 'domxml_version(': 'void | string', -\ 'domxml_xmltree(': 'string str | DomDocument', -\ 'domxml_xslt_stylesheet_doc(': 'DomDocument xsl_doc | DomXsltStylesheet', -\ 'domxml_xslt_stylesheet_file(': 'string xsl_file | DomXsltStylesheet', -\ 'domxml_xslt_stylesheet(': 'string xsl_buf | DomXsltStylesheet', -\ 'domxml_xslt_version(': 'void | int', -\ 'dotnet_load(': 'string assembly_name [, string datatype_name [, int codepage]] | int', -\ 'each(': 'array &array | array', -\ 'easter_date(': '[int year] | int', -\ 'easter_days(': '[int year [, int method]] | int', -\ 'ebcdic2ascii(': 'string ebcdic_str | int', -\ 'echo(': 'string arg1 [, string ...] | void', -\ 'empty(': 'mixed var | bool', -\ 'end(': 'array &array | mixed', -\ 'ereg(': 'string pattern, string string [, array &regs] | int', -\ 'eregi(': 'string pattern, string string [, array &regs] | int', -\ 'eregi_replace(': 'string pattern, string replacement, string string | string', -\ 'ereg_replace(': 'string pattern, string replacement, string string | string', -\ 'error_log(': 'string message [, int message_type [, string destination [, string extra_headers]]] | bool', -\ 'error_reporting(': '[int level] | int', -\ 'escapeshellarg(': 'string arg | string', -\ 'escapeshellcmd(': 'string command | string', -\ 'eval(': 'string code_str | mixed', -\ 'exec(': 'string command [, array &output [, int &return_var]] | string', -\ 'exif_imagetype(': 'string filename | int', -\ 'exif_read_data(': 'string filename [, string sections [, bool arrays [, bool thumbnail]]] | array', -\ 'exif_tagname(': 'string index | string', -\ 'exif_thumbnail(': 'string filename [, int &width [, int &height [, int &imagetype]]] | string', -\ 'exit(': '[string status] | void', -\ 'expect_expectl(': 'resource expect, array cases, string &match | mixed', -\ 'expect_popen(': 'string command | resource', -\ 'exp(': 'float arg | float', -\ 'explode(': 'string separator, string string [, int limit] | array', -\ 'expm1(': 'float number | float', -\ 'extension_loaded(': 'string name | bool', -\ 'extract(': 'array var_array [, int extract_type [, string prefix]] | int', -\ 'ezmlm_hash(': 'string addr | int', -\ 'fam_cancel_monitor(': 'resource fam, resource fam_monitor | bool', -\ 'fam_close(': 'resource fam | void', -\ 'fam_monitor_collection(': 'resource fam, string dirname, int depth, string mask | resource', -\ 'fam_monitor_directory(': 'resource fam, string dirname | resource', -\ 'fam_monitor_file(': 'resource fam, string filename | resource', -\ 'fam_next_event(': 'resource fam | array', -\ 'fam_open(': '[string appname] | resource', -\ 'fam_pending(': 'resource fam | int', -\ 'fam_resume_monitor(': 'resource fam, resource fam_monitor | bool', -\ 'fam_suspend_monitor(': 'resource fam, resource fam_monitor | bool', -\ 'fbsql_affected_rows(': '[resource link_identifier] | int', -\ 'fbsql_autocommit(': 'resource link_identifier [, bool OnOff] | bool', -\ 'fbsql_blob_size(': 'string blob_handle [, resource link_identifier] | int', -\ 'fbsql_change_user(': 'string user, string password [, string database [, resource link_identifier]] | resource', -\ 'fbsql_clob_size(': 'string clob_handle [, resource link_identifier] | int', -\ 'fbsql_close(': '[resource link_identifier] | bool', -\ 'fbsql_commit(': '[resource link_identifier] | bool', -\ 'fbsql_connect(': '[string hostname [, string username [, string password]]] | resource', -\ 'fbsql_create_blob(': 'string blob_data [, resource link_identifier] | string', -\ 'fbsql_create_clob(': 'string clob_data [, resource link_identifier] | string', -\ 'fbsql_create_db(': 'string database_name [, resource link_identifier [, string database_options]] | bool', -\ 'fbsql_database(': 'resource link_identifier [, string database] | string', -\ 'fbsql_database_password(': 'resource link_identifier [, string database_password] | string', -\ 'fbsql_data_seek(': 'resource result_identifier, int row_number | bool', -\ 'fbsql_db_query(': 'string database, string query [, resource link_identifier] | resource', -\ 'fbsql_db_status(': 'string database_name [, resource link_identifier] | int', -\ 'fbsql_drop_db(': 'string database_name [, resource link_identifier] | bool', -\ 'fbsql_errno(': '[resource link_identifier] | int', -\ 'fbsql_error(': '[resource link_identifier] | string', -\ 'fbsql_fetch_array(': 'resource result [, int result_type] | array', -\ 'fbsql_fetch_assoc(': 'resource result | array', -\ 'fbsql_fetch_field(': 'resource result [, int field_offset] | object', -\ 'fbsql_fetch_lengths(': 'resource result | array', -\ 'fbsql_fetch_object(': 'resource result [, int result_type] | object', -\ 'fbsql_fetch_row(': 'resource result | array', -\ 'fbsql_field_flags(': 'resource result [, int field_offset] | string', -\ 'fbsql_field_len(': 'resource result [, int field_offset] | int', -\ 'fbsql_field_name(': 'resource result [, int field_index] | string', -\ 'fbsql_field_seek(': 'resource result [, int field_offset] | bool', -\ 'fbsql_field_table(': 'resource result [, int field_offset] | string', -\ 'fbsql_field_type(': 'resource result [, int field_offset] | string', -\ 'fbsql_free_result(': 'resource result | bool', -\ 'fbsql_get_autostart_info(': '[resource link_identifier] | array', -\ 'fbsql_hostname(': 'resource link_identifier [, string host_name] | string', -\ 'fbsql_insert_id(': '[resource link_identifier] | int', -\ 'fbsql_list_dbs(': '[resource link_identifier] | resource', -\ 'fbsql_list_fields(': 'string database_name, string table_name [, resource link_identifier] | resource', -\ 'fbsql_list_tables(': 'string database [, resource link_identifier] | resource', -\ 'fbsql_next_result(': 'resource result_id | bool', -\ 'fbsql_num_fields(': 'resource result | int', -\ 'fbsql_num_rows(': 'resource result | int', -\ 'fbsql_password(': 'resource link_identifier [, string password] | string', -\ 'fbsql_pconnect(': '[string hostname [, string username [, string password]]] | resource', -\ 'fbsql_query(': 'string query [, resource link_identifier [, int batch_size]] | resource', -\ 'fbsql_read_blob(': 'string blob_handle [, resource link_identifier] | string', -\ 'fbsql_read_clob(': 'string clob_handle [, resource link_identifier] | string', -\ 'fbsql_result(': 'resource result [, int row [, mixed field]] | mixed', -\ 'fbsql_rollback(': '[resource link_identifier] | bool', -\ 'fbsql_select_db(': '[string database_name [, resource link_identifier]] | bool', -\ 'fbsql_set_lob_mode(': 'resource result, string database_name | bool', -\ 'fbsql_set_password(': 'resource link_identifier, string user, string password, string old_password | bool', -\ 'fbsql_set_transaction(': 'resource link_identifier, int Locking, int Isolation | void', -\ 'fbsql_start_db(': 'string database_name [, resource link_identifier [, string database_options]] | bool', -\ 'fbsql_stop_db(': 'string database_name [, resource link_identifier] | bool', -\ 'fbsql_tablename(': 'resource result, int i | string', -\ 'fbsql_username(': 'resource link_identifier [, string username] | string', -\ 'fbsql_warnings(': '[bool OnOff] | bool', -\ 'fclose(': 'resource handle | bool', -\ 'fdf_add_doc_javascript(': 'resource fdfdoc, string script_name, string script_code | bool', -\ 'fdf_add_template(': 'resource fdfdoc, int newpage, string filename, string template, int rename | bool', -\ 'fdf_close(': 'resource fdf_document | void', -\ 'fdf_create(': 'void | resource', -\ 'fdf_enum_values(': 'resource fdfdoc, callback function [, mixed userdata] | bool', -\ 'fdf_errno(': 'void | int', -\ 'fdf_error(': '[int error_code] | string', -\ 'fdf_get_ap(': 'resource fdf_document, string field, int face, string filename | bool', -\ 'fdf_get_attachment(': 'resource fdf_document, string fieldname, string savepath | array', -\ 'fdf_get_encoding(': 'resource fdf_document | string', -\ 'fdf_get_file(': 'resource fdf_document | string', -\ 'fdf_get_flags(': 'resource fdfdoc, string fieldname, int whichflags | int', -\ 'fdf_get_opt(': 'resource fdfdof, string fieldname [, int element] | mixed', -\ 'fdf_get_status(': 'resource fdf_document | string', -\ 'fdf_get_value(': 'resource fdf_document, string fieldname [, int which] | mixed', -\ 'fdf_get_version(': '[resource fdf_document] | string', -\ 'fdf_header(': 'void | void', -\ 'fdf_next_field_name(': 'resource fdf_document [, string fieldname] | string', -\ 'fdf_open(': 'string filename | resource', -\ 'fdf_open_string(': 'string fdf_data | resource', -\ 'fdf_remove_item(': 'resource fdfdoc, string fieldname, int item | bool', -\ 'fdf_save(': 'resource fdf_document [, string filename] | bool', -\ 'fdf_save_string(': 'resource fdf_document | string', -\ 'fdf_set_ap(': 'resource fdf_document, string field_name, int face, string filename, int page_number | bool', -\ 'fdf_set_encoding(': 'resource fdf_document, string encoding | bool', -\ 'fdf_set_file(': 'resource fdf_document, string url [, string target_frame] | bool', -\ 'fdf_set_flags(': 'resource fdf_document, string fieldname, int whichFlags, int newFlags | bool', -\ 'fdf_set_javascript_action(': 'resource fdf_document, string fieldname, int trigger, string script | bool', -\ 'fdf_set_on_import_javascript(': 'resource fdfdoc, string script, bool before_data_import | bool', -\ 'fdf_set_opt(': 'resource fdf_document, string fieldname, int element, string str1, string str2 | bool', -\ 'fdf_set_status(': 'resource fdf_document, string status | bool', -\ 'fdf_set_submit_form_action(': 'resource fdf_document, string fieldname, int trigger, string script, int flags | bool', -\ 'fdf_set_target_frame(': 'resource fdf_document, string frame_name | bool', -\ 'fdf_set_value(': 'resource fdf_document, string fieldname, mixed value [, int isName] | bool', -\ 'fdf_set_version(': 'resource fdf_document, string version | bool', -\ 'feof(': 'resource handle | bool', -\ 'fflush(': 'resource handle | bool', -\ 'fgetc(': 'resource handle | string', -\ 'fgetcsv(': 'resource handle [, int length [, string delimiter [, string enclosure]]] | array', -\ 'fgets(': 'resource handle [, int length] | string', -\ 'fgetss(': 'resource handle [, int length [, string allowable_tags]] | string', -\ 'fileatime(': 'string filename | int', -\ 'filectime(': 'string filename | int', -\ 'file_exists(': 'string filename | bool', -\ 'file_get_contents(': 'string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] | string', -\ 'filegroup(': 'string filename | int', -\ 'file(': 'string filename [, int use_include_path [, resource context]] | array', -\ 'fileinode(': 'string filename | int', -\ 'filemtime(': 'string filename | int', -\ 'fileowner(': 'string filename | int', -\ 'fileperms(': 'string filename | int', -\ 'filepro_fieldcount(': 'void | int', -\ 'filepro_fieldname(': 'int field_number | string', -\ 'filepro_fieldtype(': 'int field_number | string', -\ 'filepro_fieldwidth(': 'int field_number | int', -\ 'filepro(': 'string directory | bool', -\ 'filepro_retrieve(': 'int row_number, int field_number | string', -\ 'filepro_rowcount(': 'void | int', -\ 'file_put_contents(': 'string filename, mixed data [, int flags [, resource context]] | int', -\ 'filesize(': 'string filename | int', -\ 'filetype(': 'string filename | string', -\ 'floatval(': 'mixed var | float', -\ 'flock(': 'resource handle, int operation [, int &wouldblock] | bool', -\ 'floor(': 'float value | float', -\ 'flush(': 'void | void', -\ 'fmod(': 'float x, float y | float', -\ 'fnmatch(': 'string pattern, string string [, int flags] | bool', -\ 'fopen(': 'string filename, string mode [, bool use_include_path [, resource zcontext]] | resource', -\ 'fpassthru(': 'resource handle | int', -\ 'fprintf(': 'resource handle, string format [, mixed args [, mixed ...]] | int', -\ 'fputcsv(': 'resource handle [, array fields [, string delimiter [, string enclosure]]] | int', -\ 'fread(': 'resource handle, int length | string', -\ 'frenchtojd(': 'int month, int day, int year | int', -\ 'fribidi_log2vis(': 'string str, string direction, int charset | string', -\ 'fscanf(': 'resource handle, string format [, mixed &...] | mixed', -\ 'fseek(': 'resource handle, int offset [, int whence] | int', -\ 'fsockopen(': 'string target [, int port [, int &errno [, string &errstr [, float timeout]]]] | resource', -\ 'fstat(': 'resource handle | array', -\ 'ftell(': 'resource handle | int', -\ 'ftok(': 'string pathname, string proj | int', -\ 'ftp_alloc(': 'resource ftp_stream, int filesize [, string &result] | bool', -\ 'ftp_cdup(': 'resource ftp_stream | bool', -\ 'ftp_chdir(': 'resource ftp_stream, string directory | bool', -\ 'ftp_chmod(': 'resource ftp_stream, int mode, string filename | int', -\ 'ftp_close(': 'resource ftp_stream | bool', -\ 'ftp_connect(': 'string host [, int port [, int timeout]] | resource', -\ 'ftp_delete(': 'resource ftp_stream, string path | bool', -\ 'ftp_exec(': 'resource ftp_stream, string command | bool', -\ 'ftp_fget(': 'resource ftp_stream, resource handle, string remote_file, int mode [, int resumepos] | bool', -\ 'ftp_fput(': 'resource ftp_stream, string remote_file, resource handle, int mode [, int startpos] | bool', -\ 'ftp_get(': 'resource ftp_stream, string local_file, string remote_file, int mode [, int resumepos] | bool', -\ 'ftp_get_option(': 'resource ftp_stream, int option | mixed', -\ 'ftp_login(': 'resource ftp_stream, string username, string password | bool', -\ 'ftp_mdtm(': 'resource ftp_stream, string remote_file | int', -\ 'ftp_mkdir(': 'resource ftp_stream, string directory | string', -\ 'ftp_nb_continue(': 'resource ftp_stream | int', -\ 'ftp_nb_fget(': 'resource ftp_stream, resource handle, string remote_file, int mode [, int resumepos] | int', -\ 'ftp_nb_fput(': 'resource ftp_stream, string remote_file, resource handle, int mode [, int startpos] | int', -\ 'ftp_nb_get(': 'resource ftp_stream, string local_file, string remote_file, int mode [, int resumepos] | int', -\ 'ftp_nb_put(': 'resource ftp_stream, string remote_file, string local_file, int mode [, int startpos] | int', -\ 'ftp_nlist(': 'resource ftp_stream, string directory | array', -\ 'ftp_pasv(': 'resource ftp_stream, bool pasv | bool', -\ 'ftp_put(': 'resource ftp_stream, string remote_file, string local_file, int mode [, int startpos] | bool', -\ 'ftp_pwd(': 'resource ftp_stream | string', -\ 'ftp_raw(': 'resource ftp_stream, string command | array', -\ 'ftp_rawlist(': 'resource ftp_stream, string directory [, bool recursive] | array', -\ 'ftp_rename(': 'resource ftp_stream, string oldname, string newname | bool', -\ 'ftp_rmdir(': 'resource ftp_stream, string directory | bool', -\ 'ftp_set_option(': 'resource ftp_stream, int option, mixed value | bool', -\ 'ftp_site(': 'resource ftp_stream, string command | bool', -\ 'ftp_size(': 'resource ftp_stream, string remote_file | int', -\ 'ftp_ssl_connect(': 'string host [, int port [, int timeout]] | resource', -\ 'ftp_systype(': 'resource ftp_stream | string', -\ 'ftruncate(': 'resource handle, int size | bool', -\ 'func_get_arg(': 'int arg_num | mixed', -\ 'func_get_args(': 'void | array', -\ 'func_num_args(': 'void | int', -\ 'function_exists(': 'string function_name | bool', -\ 'fwrite(': 'resource handle, string string [, int length] | int', -\ 'gd_info(': 'void | array', -\ 'getallheaders(': 'void | array', -\ 'get_browser(': '[string user_agent [, bool return_array]] | mixed', -\ 'get_cfg_var(': 'string varname | string', -\ 'get_class(': '[object obj] | string', -\ 'get_class_methods(': 'mixed class_name | array', -\ 'get_class_vars(': 'string class_name | array', -\ 'get_current_user(': 'void | string', -\ 'getcwd(': 'void | string', -\ 'getdate(': '[int timestamp] | array', -\ 'get_declared_classes(': 'void | array', -\ 'get_declared_interfaces(': 'void | array', -\ 'get_defined_constants(': '[mixed categorize] | array', -\ 'get_defined_functions(': 'void | array', -\ 'get_defined_vars(': 'void | array', -\ 'getenv(': 'string varname | string', -\ 'get_extension_funcs(': 'string module_name | array', -\ 'get_headers(': 'string url [, int format] | array', -\ 'gethostbyaddr(': 'string ip_address | string', -\ 'gethostbyname(': 'string hostname | string', -\ 'gethostbynamel(': 'string hostname | array', -\ 'get_html_translation_table(': '[int table [, int quote_style]] | array', -\ 'getimagesize(': 'string filename [, array &imageinfo] | array', -\ 'get_included_files(': 'void | array', -\ 'get_include_path(': 'void | string', -\ 'getlastmod(': 'void | int', -\ 'get_loaded_extensions(': 'void | array', -\ 'get_magic_quotes_gpc(': 'void | int', -\ 'get_magic_quotes_runtime(': 'void | int', -\ 'get_meta_tags(': 'string filename [, bool use_include_path] | array', -\ 'getmxrr(': 'string hostname, array &mxhosts [, array &weight] | bool', -\ 'getmygid(': 'void | int', -\ 'getmyinode(': 'void | int', -\ 'getmypid(': 'void | int', -\ 'getmyuid(': 'void | int', -\ 'get_object_vars(': 'object obj | array', -\ 'getopt(': 'string options | array', -\ 'get_parent_class(': '[mixed obj] | string', -\ 'getprotobyname(': 'string name | int', -\ 'getprotobynumber(': 'int number | string', -\ 'getrandmax(': 'void | int', -\ 'get_resource_type(': 'resource handle | string', -\ 'getrusage(': '[int who] | array', -\ 'getservbyname(': 'string service, string protocol | int', -\ 'getservbyport(': 'int port, string protocol | string', -\ 'gettext(': 'string message | string', -\ 'gettimeofday(': '[bool return_float] | mixed', -\ 'gettype(': 'mixed var | string', -\ 'glob(': 'string pattern [, int flags] | array', -\ 'gmdate(': 'string format [, int timestamp] | string', -\ 'gmmktime(': '[int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] | int', -\ 'gmp_abs(': 'resource a | resource', -\ 'gmp_add(': 'resource a, resource b | resource', -\ 'gmp_and(': 'resource a, resource b | resource', -\ 'gmp_clrbit(': 'resource &a, int index | void', -\ 'gmp_cmp(': 'resource a, resource b | int', -\ 'gmp_com(': 'resource a | resource', -\ 'gmp_divexact(': 'resource n, resource d | resource', -\ 'gmp_div_q(': 'resource a, resource b [, int round] | resource', -\ 'gmp_div_qr(': 'resource n, resource d [, int round] | array', -\ 'gmp_div_r(': 'resource n, resource d [, int round] | resource', -\ 'gmp_fact(': 'int a | resource', -\ 'gmp_gcdext(': 'resource a, resource b | array', -\ 'gmp_gcd(': 'resource a, resource b | resource', -\ 'gmp_hamdist(': 'resource a, resource b | int', -\ 'gmp_init(': 'mixed number [, int base] | resource', -\ 'gmp_intval(': 'resource gmpnumber | int', -\ 'gmp_invert(': 'resource a, resource b | resource', -\ 'gmp_jacobi(': 'resource a, resource p | int', -\ 'gmp_legendre(': 'resource a, resource p | int', -\ 'gmp_mod(': 'resource n, resource d | resource', -\ 'gmp_mul(': 'resource a, resource b | resource', -\ 'gmp_neg(': 'resource a | resource', -\ 'gmp_or(': 'resource a, resource b | resource', -\ 'gmp_perfect_square(': 'resource a | bool', -\ 'gmp_popcount(': 'resource a | int', -\ 'gmp_pow(': 'resource base, int exp | resource', -\ 'gmp_powm(': 'resource base, resource exp, resource mod | resource', -\ 'gmp_prob_prime(': 'resource a [, int reps] | int', -\ 'gmp_random(': 'int limiter | resource', -\ 'gmp_scan0(': 'resource a, int start | int', -\ 'gmp_scan1(': 'resource a, int start | int', -\ 'gmp_setbit(': 'resource &a, int index [, bool set_clear] | void', -\ 'gmp_sign(': 'resource a | int', -\ 'gmp_sqrt(': 'resource a | resource', -\ 'gmp_sqrtrem(': 'resource a | array', -\ 'gmp_strval(': 'resource gmpnumber [, int base] | string', -\ 'gmp_sub(': 'resource a, resource b | resource', -\ 'gmp_xor(': 'resource a, resource b | resource', -\ 'gmstrftime(': 'string format [, int timestamp] | string', -\ 'gnupg_adddecryptkey(': 'resource identifier, string fingerprint, string passphrase | bool', -\ 'gnupg_addencryptkey(': 'resource identifier, string fingerprint | bool', -\ 'gnupg_addsignkey(': 'resource identifier, string fingerprint [, string passphrase] | bool', -\ 'gnupg_cleardecryptkeys(': 'resource identifier | bool', -\ 'gnupg_clearencryptkeys(': 'resource identifier | bool', -\ 'gnupg_clearsignkeys(': 'resource identifier | bool', -\ 'gnupg_decrypt(': 'resource identifier, string text | string', -\ 'gnupg_decryptverify(': 'resource identifier, string text, string plaintext | array', -\ 'gnupg_encrypt(': 'resource identifier, string plaintext | string', -\ 'gnupg_encryptsign(': 'resource identifier, string plaintext | string', -\ 'gnupg_export(': 'resource identifier, string fingerprint | string', -\ 'gnupg_geterror(': 'resource identifier | string', -\ 'gnupg_getprotocol(': 'resource identifier | int', -\ 'gnupg_import(': 'resource identifier, string keydata | array', -\ 'gnupg_keyinfo(': 'resource identifier, string pattern | array', -\ 'gnupg_setarmor(': 'resource identifier, int armor | bool', -\ 'gnupg_seterrormode(': 'resource identifier, int errormode | void', -\ 'gnupg_setsignmode(': 'resource identifier, int signmode | bool', -\ 'gnupg_sign(': 'resource identifier, string plaintext | string', -\ 'gnupg_verify(': 'resource identifier, string signed_text, string signature [, string plaintext] | array', -\ 'gopher_parsedir(': 'string dirent | array', -\ 'gregoriantojd(': 'int month, int day, int year | int', -\ 'gzclose(': 'resource zp | bool', -\ 'gzcompress(': 'string data [, int level] | string', -\ 'gzdeflate(': 'string data [, int level] | string', -\ 'gzencode(': 'string data [, int level [, int encoding_mode]] | string', -\ 'gzeof(': 'resource zp | int', -\ 'gzfile(': 'string filename [, int use_include_path] | array', -\ 'gzgetc(': 'resource zp | string', -\ 'gzgets(': 'resource zp, int length | string', -\ 'gzgetss(': 'resource zp, int length [, string allowable_tags] | string', -\ 'gzinflate(': 'string data [, int length] | string', -\ 'gzopen(': 'string filename, string mode [, int use_include_path] | resource', -\ 'gzpassthru(': 'resource zp | int', -\ 'gzread(': 'resource zp, int length | string', -\ 'gzrewind(': 'resource zp | bool', -\ 'gzseek(': 'resource zp, int offset | int', -\ 'gztell(': 'resource zp | int', -\ 'gzuncompress(': 'string data [, int length] | string', -\ 'gzwrite(': 'resource zp, string string [, int length] | int', -\ '__halt_compiler(': 'void | void', -\ 'hash_algos(': 'void | array', -\ 'hash_file(': 'string algo, string filename [, bool raw_output] | string', -\ 'hash_final(': 'resource context [, bool raw_output] | string', -\ 'hash_hmac_file(': 'string algo, string filename, string key [, bool raw_output] | string', -\ 'hash_hmac(': 'string algo, string data, string key [, bool raw_output] | string', -\ 'hash(': 'string algo, string data [, bool raw_output] | string', -\ 'hash_init(': 'string algo [, int options, string key] | resource', -\ 'hash_update_file(': 'resource context, string filename [, resource context] | bool', -\ 'hash_update(': 'resource context, string data | bool', -\ 'hash_update_stream(': 'resource context, resource handle [, int length] | int', -\ 'header(': 'string string [, bool replace [, int http_response_code]] | void', -\ 'headers_list(': 'void | array', -\ 'headers_sent(': '[string &file [, int &line]] | bool', -\ 'hebrevc(': 'string hebrew_text [, int max_chars_per_line] | string', -\ 'hebrev(': 'string hebrew_text [, int max_chars_per_line] | string', -\ 'hexdec(': 'string hex_string | number', -\ 'highlight_file(': 'string filename [, bool return] | mixed', -\ 'highlight_string(': 'string str [, bool return] | mixed', -\ 'htmlentities(': 'string string [, int quote_style [, string charset]] | string', -\ 'html_entity_decode(': 'string string [, int quote_style [, string charset]] | string', -\ 'htmlspecialchars_decode(': 'string string [, int quote_style] | string', -\ 'htmlspecialchars(': 'string string [, int quote_style [, string charset]] | string', -\ 'http_build_query(': 'array formdata [, string numeric_prefix] | string', -\ 'hw_api_attribute(': '[string name [, string value]] | HW_API_Attribute', -\ 'hw_api_attribute->key(': 'void | string', -\ 'hw_api_attribute->langdepvalue(': 'string language | string', -\ 'hw_api_attribute->value(': 'void | string', -\ 'hw_api_attribute->values(': 'void | array', -\ 'hw_api->checkin(': 'array parameter | bool', -\ 'hw_api->checkout(': 'array parameter | bool', -\ 'hw_api->children(': 'array parameter | array', -\ 'hw_api->content(': 'array parameter | HW_API_Content', -\ 'hw_api_content->mimetype(': 'void | string', -\ 'hw_api_content->read(': 'string buffer, int len | string', -\ 'hw_api->copy(': 'array parameter | hw_api_object', -\ 'hw_api->dbstat(': 'array parameter | hw_api_object', -\ 'hw_api->dcstat(': 'array parameter | hw_api_object', -\ 'hw_api->dstanchors(': 'array parameter | array', -\ 'hw_api->dstofsrcanchor(': 'array parameter | hw_api_object', -\ 'hw_api_error->count(': 'void | int', -\ 'hw_api_error->reason(': 'void | HW_API_Reason', -\ 'hw_api->find(': 'array parameter | array', -\ 'hw_api->ftstat(': 'array parameter | hw_api_object', -\ 'hwapi_hgcsp(': 'string hostname [, int port] | HW_API', -\ 'hw_api->hwstat(': 'array parameter | hw_api_object', -\ 'hw_api->identify(': 'array parameter | bool', -\ 'hw_api->info(': 'array parameter | array', -\ 'hw_api->insertanchor(': 'array parameter | hw_api_object', -\ 'hw_api->insertcollection(': 'array parameter | hw_api_object', -\ 'hw_api->insertdocument(': 'array parameter | hw_api_object', -\ 'hw_api->insert(': 'array parameter | hw_api_object', -\ 'hw_api->link(': 'array parameter | bool', -\ 'hw_api->lock(': 'array parameter | bool', -\ 'hw_api->move(': 'array parameter | bool', -\ 'hw_api_content(': 'string content, string mimetype | HW_API_Content', -\ 'hw_api_object->assign(': 'array parameter | bool', -\ 'hw_api_object->attreditable(': 'array parameter | bool', -\ 'hw_api->objectbyanchor(': 'array parameter | hw_api_object', -\ 'hw_api_object->count(': 'array parameter | int', -\ 'hw_api->object(': 'array parameter | hw_api_object', -\ 'hw_api_object->insert(': 'HW_API_Attribute attribute | bool', -\ 'hw_api_object(': 'array parameter | hw_api_object', -\ 'hw_api_object->remove(': 'string name | bool', -\ 'hw_api_object->title(': 'array parameter | string', -\ 'hw_api_object->value(': 'string name | string', -\ 'hw_api->parents(': 'array parameter | array', -\ 'hw_api_reason->description(': 'void | string', -\ 'hw_api_reason->type(': 'void | HW_API_Reason', -\ 'hw_api->remove(': 'array parameter | bool', -\ 'hw_api->replace(': 'array parameter | hw_api_object', -\ 'hw_api->setcommittedversion(': 'array parameter | hw_api_object', -\ 'hw_api->srcanchors(': 'array parameter | array', -\ 'hw_api->srcsofdst(': 'array parameter | array', -\ 'hw_api->unlock(': 'array parameter | bool', -\ 'hw_api->user(': 'array parameter | hw_api_object', -\ 'hw_api->userlist(': 'array parameter | array', -\ 'hw_array2objrec(': 'array object_array | string', -\ 'hw_changeobject(': 'int link, int objid, array attributes | bool', -\ 'hw_children(': 'int connection, int objectID | array', -\ 'hw_childrenobj(': 'int connection, int objectID | array', -\ 'hw_close(': 'int connection | bool', -\ 'hw_connect(': 'string host, int port [, string username, string password] | int', -\ 'hw_connection_info(': 'int link | void', -\ 'hw_cp(': 'int connection, array object_id_array, int destination_id | int', -\ 'hw_deleteobject(': 'int connection, int object_to_delete | bool', -\ 'hw_docbyanchor(': 'int connection, int anchorID | int', -\ 'hw_docbyanchorobj(': 'int connection, int anchorID | string', -\ 'hw_document_attributes(': 'int hw_document | string', -\ 'hw_document_bodytag(': 'int hw_document [, string prefix] | string', -\ 'hw_document_content(': 'int hw_document | string', -\ 'hw_document_setcontent(': 'int hw_document, string content | bool', -\ 'hw_document_size(': 'int hw_document | int', -\ 'hw_dummy(': 'int link, int id, int msgid | string', -\ 'hw_edittext(': 'int connection, int hw_document | bool', -\ 'hw_error(': 'int connection | int', -\ 'hw_errormsg(': 'int connection | string', -\ 'hw_free_document(': 'int hw_document | bool', -\ 'hw_getanchors(': 'int connection, int objectID | array', -\ 'hw_getanchorsobj(': 'int connection, int objectID | array', -\ 'hw_getandlock(': 'int connection, int objectID | string', -\ 'hw_getchildcoll(': 'int connection, int objectID | array', -\ 'hw_getchildcollobj(': 'int connection, int objectID | array', -\ 'hw_getchilddoccoll(': 'int connection, int objectID | array', -\ 'hw_getchilddoccollobj(': 'int connection, int objectID | array', -\ 'hw_getobjectbyquerycoll(': 'int connection, int objectID, string query, int max_hits | array', -\ 'hw_getobjectbyquerycollobj(': 'int connection, int objectID, string query, int max_hits | array', -\ 'hw_getobjectbyquery(': 'int connection, string query, int max_hits | array', -\ 'hw_getobjectbyqueryobj(': 'int connection, string query, int max_hits | array', -\ 'hw_getobject(': 'int connection, mixed objectID [, string query] | mixed', -\ 'hw_getparents(': 'int connection, int objectID | array', -\ 'hw_getparentsobj(': 'int connection, int objectID | array', -\ 'hw_getrellink(': 'int link, int rootid, int sourceid, int destid | string', -\ 'hw_getremotechildren(': 'int connection, string object_record | mixed', -\ 'hw_getremote(': 'int connection, int objectID | int', -\ 'hw_getsrcbydestobj(': 'int connection, int objectID | array', -\ 'hw_gettext(': 'int connection, int objectID [, mixed rootID/prefix] | int', -\ 'hw_getusername(': 'int connection | string', -\ 'hw_identify(': 'int link, string username, string password | string', -\ 'hw_incollections(': 'int connection, array object_id_array, array collection_id_array, int return_collections | array', -\ 'hw_info(': 'int connection | string', -\ 'hw_inscoll(': 'int connection, int objectID, array object_array | int', -\ 'hw_insdoc(': 'resource connection, int parentID, string object_record [, string text] | int', -\ 'hw_insertanchors(': 'int hwdoc, array anchorecs, array dest [, array urlprefixes] | bool', -\ 'hw_insertdocument(': 'int connection, int parent_id, int hw_document | int', -\ 'hw_insertobject(': 'int connection, string object_rec, string parameter | int', -\ 'hw_mapid(': 'int connection, int server_id, int object_id | int', -\ 'hw_modifyobject(': 'int connection, int object_to_change, array remove, array add [, int mode] | bool', -\ 'hw_mv(': 'int connection, array object_id_array, int source_id, int destination_id | int', -\ 'hw_new_document(': 'string object_record, string document_data, int document_size | int', -\ 'hw_objrec2array(': 'string object_record [, array format] | array', -\ 'hw_output_document(': 'int hw_document | bool', -\ 'hw_pconnect(': 'string host, int port [, string username, string password] | int', -\ 'hw_pipedocument(': 'int connection, int objectID [, array url_prefixes] | int', -\ 'hw_root(': ' | int', -\ 'hw_setlinkroot(': 'int link, int rootid | int', -\ 'hw_stat(': 'int link | string', -\ 'hw_unlock(': 'int connection, int objectID | bool', -\ 'hw_who(': 'int connection | array', -\ 'hypot(': 'float x, float y | float', -\ 'i18n_loc_get_default(': 'void | string', -\ 'i18n_loc_set_default(': 'string name | bool', -\ 'ibase_add_user(': 'resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]] | bool', -\ 'ibase_affected_rows(': '[resource link_identifier] | int', -\ 'ibase_backup(': 'resource service_handle, string source_db, string dest_file [, int options [, bool verbose]] | mixed', -\ 'ibase_blob_add(': 'resource blob_handle, string data | void', -\ 'ibase_blob_cancel(': 'resource blob_handle | bool', -\ 'ibase_blob_close(': 'resource blob_handle | mixed', -\ 'ibase_blob_create(': '[resource link_identifier] | resource', -\ 'ibase_blob_echo(': 'resource link_identifier, string blob_id | bool', -\ 'ibase_blob_get(': 'resource blob_handle, int len | string', -\ 'ibase_blob_import(': 'resource link_identifier, resource file_handle | string', -\ 'ibase_blob_info(': 'resource link_identifier, string blob_id | array', -\ 'ibase_blob_open(': 'resource link_identifier, string blob_id | resource', -\ 'ibase_close(': '[resource connection_id] | bool', -\ 'ibase_commit(': '[resource link_or_trans_identifier] | bool', -\ 'ibase_commit_ret(': '[resource link_or_trans_identifier] | bool', -\ 'ibase_connect(': '[string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role [, int sync]]]]]]]] | resource', -\ 'ibase_db_info(': 'resource service_handle, string db, int action [, int argument] | string', -\ 'ibase_delete_user(': 'resource service_handle, string user_name | bool', -\ 'ibase_drop_db(': '[resource connection] | bool', -\ 'ibase_errcode(': 'void | int', -\ 'ibase_errmsg(': 'void | string', -\ 'ibase_execute(': 'resource query [, mixed bind_arg [, mixed ...]] | resource', -\ 'ibase_fetch_assoc(': 'resource result [, int fetch_flag] | array', -\ 'ibase_fetch_object(': 'resource result_id [, int fetch_flag] | object', -\ 'ibase_fetch_row(': 'resource result_identifier [, int fetch_flag] | array', -\ 'ibase_field_info(': 'resource result, int field_number | array', -\ 'ibase_free_event_handler(': 'resource event | bool', -\ 'ibase_free_query(': 'resource query | bool', -\ 'ibase_free_result(': 'resource result_identifier | bool', -\ 'ibase_gen_id(': 'string generator [, int increment [, resource link_identifier]] | mixed', -\ 'ibase_maintain_db(': 'resource service_handle, string db, int action [, int argument] | bool', -\ 'ibase_modify_user(': 'resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]] | bool', -\ 'ibase_name_result(': 'resource result, string name | bool', -\ 'ibase_num_fields(': 'resource result_id | int', -\ 'ibase_num_params(': 'resource query | int', -\ 'ibase_param_info(': 'resource query, int param_number | array', -\ 'ibase_pconnect(': '[string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role [, int sync]]]]]]]] | resource', -\ 'ibase_prepare(': 'string query | resource', -\ 'ibase_query(': '[resource link_identifier, string query [, int bind_args]] | resource', -\ 'ibase_restore(': 'resource service_handle, string source_file, string dest_db [, int options [, bool verbose]] | mixed', -\ 'ibase_rollback(': '[resource link_or_trans_identifier] | bool', -\ 'ibase_rollback_ret(': '[resource link_or_trans_identifier] | bool', -\ 'ibase_server_info(': 'resource service_handle, int action | string', -\ 'ibase_service_attach(': 'string host, string dba_username, string dba_password | resource', -\ 'ibase_service_detach(': 'resource service_handle | bool', -\ 'ibase_set_event_handler(': 'callback event_handler, string event_name1 [, string event_name2 [, string ...]] | resource', -\ 'ibase_timefmt(': 'string format [, int columntype] | int', -\ 'ibase_trans(': '[int trans_args [, resource link_identifier]] | resource', -\ 'ibase_wait_event(': 'string event_name1 [, string event_name2 [, string ...]] | string', -\ 'icap_close(': 'int icap_stream [, int flags] | int', -\ 'icap_create_calendar(': 'int stream_id, string calendar | string', -\ 'icap_delete_calendar(': 'int stream_id, string calendar | string', -\ 'icap_delete_event(': 'int stream_id, int uid | string', -\ 'icap_fetch_event(': 'int stream_id, int event_id [, int options] | int', -\ 'icap_list_alarms(': 'int stream_id, array date, array time | int', -\ 'icap_list_events(': 'int stream_id, int begin_date [, int end_date] | array', -\ 'icap_open(': 'string calendar, string username, string password, string options | resource', -\ 'icap_rename_calendar(': 'int stream_id, string old_name, string new_name | string', -\ 'icap_reopen(': 'int stream_id, string calendar [, int options] | int', -\ 'icap_snooze(': 'int stream_id, int uid | string', -\ 'icap_store_event(': 'int stream_id, object event | string', -\ 'iconv_get_encoding(': '[string type] | mixed', -\ 'iconv(': 'string in_charset, string out_charset, string str | string', -\ 'iconv_mime_decode_headers(': 'string encoded_headers [, int mode [, string charset]] | array', -\ 'iconv_mime_decode(': 'string encoded_header [, int mode [, string charset]] | string', -\ 'iconv_mime_encode(': 'string field_name, string field_value [, array preferences] | string', -\ 'iconv_set_encoding(': 'string type, string charset | bool', -\ 'iconv_strlen(': 'string str [, string charset] | int', -\ 'iconv_strpos(': 'string haystack, string needle [, int offset [, string charset]] | int', -\ 'iconv_strrpos(': 'string haystack, string needle [, string charset] | int', -\ 'iconv_substr(': 'string str, int offset [, int length [, string charset]] | string', -\ 'id3_get_frame_long_name(': 'string frameId | string', -\ 'id3_get_frame_short_name(': 'string frameId | string', -\ 'id3_get_genre_id(': 'string genre | int', -\ 'id3_get_genre_list(': 'void | array', -\ 'id3_get_genre_name(': 'int genre_id | string', -\ 'id3_get_tag(': 'string filename [, int version] | array', -\ 'id3_get_version(': 'string filename | int', -\ 'id3_remove_tag(': 'string filename [, int version] | bool', -\ 'id3_set_tag(': 'string filename, array tag [, int version] | bool', -\ 'idate(': 'string format [, int timestamp] | int', -\ 'ifx_affected_rows(': 'int result_id | int', -\ 'ifx_blobinfile_mode(': 'int mode | void', -\ 'ifx_byteasvarchar(': 'int mode | void', -\ 'ifx_close(': '[int link_identifier] | int', -\ 'ifx_connect(': '[string database [, string userid [, string password]]] | int', -\ 'ifx_copy_blob(': 'int bid | int', -\ 'ifx_create_blob(': 'int type, int mode, string param | int', -\ 'ifx_create_char(': 'string param | int', -\ 'ifx_do(': 'int result_id | int', -\ 'ifx_error(': 'void | string', -\ 'ifx_errormsg(': '[int errorcode] | string', -\ 'ifx_fetch_row(': 'int result_id [, mixed position] | array', -\ 'ifx_fieldproperties(': 'int result_id | array', -\ 'ifx_fieldtypes(': 'int result_id | array', -\ 'ifx_free_blob(': 'int bid | int', -\ 'ifx_free_char(': 'int bid | int', -\ 'ifx_free_result(': 'int result_id | int', -\ 'ifx_get_blob(': 'int bid | int', -\ 'ifx_get_char(': 'int bid | int', -\ 'ifx_getsqlca(': 'int result_id | array', -\ 'ifx_htmltbl_result(': 'int result_id [, string html_table_options] | int', -\ 'ifx_nullformat(': 'int mode | void', -\ 'ifx_num_fields(': 'int result_id | int', -\ 'ifx_num_rows(': 'int result_id | int', -\ 'ifx_pconnect(': '[string database [, string userid [, string password]]] | int', -\ 'ifx_prepare(': 'string query, int conn_id [, int cursor_def, mixed blobidarray] | int', -\ 'ifx_query(': 'string query, int link_identifier [, int cursor_type [, mixed blobidarray]] | int', -\ 'ifx_textasvarchar(': 'int mode | void', -\ 'ifx_update_blob(': 'int bid, string content | bool', -\ 'ifx_update_char(': 'int bid, string content | int', -\ 'ifxus_close_slob(': 'int bid | int', -\ 'ifxus_create_slob(': 'int mode | int', -\ 'ifxus_free_slob(': 'int bid | int', -\ 'ifxus_open_slob(': 'int bid, int mode | int', -\ 'ifxus_read_slob(': 'int bid, int nbytes | int', -\ 'ifxus_seek_slob(': 'int bid, int mode, int offset | int', -\ 'ifxus_tell_slob(': 'int bid | int', -\ 'ifxus_write_slob(': 'int bid, string content | int', -\ 'ignore_user_abort(': '[bool setting] | int', -\ 'iis_add_server(': 'string path, string comment, string server_ip, int port, string host_name, int rights, int start_server | int', -\ 'iis_get_dir_security(': 'int server_instance, string virtual_path | int', -\ 'iis_get_script_map(': 'int server_instance, string virtual_path, string script_extension | string', -\ 'iis_get_server_by_comment(': 'string comment | int', -\ 'iis_get_server_by_path(': 'string path | int', -\ 'iis_get_server_rights(': 'int server_instance, string virtual_path | int', -\ 'iis_get_service_state(': 'string service_id | int', -\ 'iis_remove_server(': 'int server_instance | int', -\ 'iis_set_app_settings(': 'int server_instance, string virtual_path, string application_scope | int', -\ 'iis_set_dir_security(': 'int server_instance, string virtual_path, int directory_flags | int', -\ 'iis_set_script_map(': 'int server_instance, string virtual_path, string script_extension, string engine_path, int allow_scripting | int', -\ 'iis_set_server_rights(': 'int server_instance, string virtual_path, int directory_flags | int', -\ 'iis_start_server(': 'int server_instance | int', -\ 'iis_start_service(': 'string service_id | int', -\ 'iis_stop_server(': 'int server_instance | int', -\ 'iis_stop_service(': 'string service_id | int', -\ 'image2wbmp(': 'resource image [, string filename [, int threshold]] | int', -\ 'imagealphablending(': 'resource image, bool blendmode | bool', -\ 'imageantialias(': 'resource im, bool on | bool', -\ 'imagearc(': 'resource image, int cx, int cy, int w, int h, int s, int e, int color | bool', -\ 'imagechar(': 'resource image, int font, int x, int y, string c, int color | bool', -\ 'imagecharup(': 'resource image, int font, int x, int y, string c, int color | bool', -\ 'imagecolorallocatealpha(': 'resource image, int red, int green, int blue, int alpha | int', -\ 'imagecolorallocate(': 'resource image, int red, int green, int blue | int', -\ 'imagecolorat(': 'resource image, int x, int y | int', -\ 'imagecolorclosestalpha(': 'resource image, int red, int green, int blue, int alpha | int', -\ 'imagecolorclosest(': 'resource image, int red, int green, int blue | int', -\ 'imagecolorclosesthwb(': 'resource image, int red, int green, int blue | int', -\ 'imagecolordeallocate(': 'resource image, int color | bool', -\ 'imagecolorexactalpha(': 'resource image, int red, int green, int blue, int alpha | int', -\ 'imagecolorexact(': 'resource image, int red, int green, int blue | int', -\ 'imagecolormatch(': 'resource image1, resource image2 | bool', -\ 'imagecolorresolvealpha(': 'resource image, int red, int green, int blue, int alpha | int', -\ 'imagecolorresolve(': 'resource image, int red, int green, int blue | int', -\ 'imagecolorset(': 'resource image, int index, int red, int green, int blue | void', -\ 'imagecolorsforindex(': 'resource image, int index | array', -\ 'imagecolorstotal(': 'resource image | int', -\ 'imagecolortransparent(': 'resource image [, int color] | int', -\ 'imageconvolution(': 'resource image, array matrix3x3, float div, float offset | bool', -\ 'imagecopy(': 'resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h | bool', -\ 'imagecopymergegray(': 'resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct | bool', -\ 'imagecopymerge(': 'resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct | bool', -\ 'imagecopyresampled(': 'resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h | bool', -\ 'imagecopyresized(': 'resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h | bool', -\ 'imagecreatefromgd2(': 'string filename | resource', -\ 'imagecreatefromgd2part(': 'string filename, int srcX, int srcY, int width, int height | resource', -\ 'imagecreatefromgd(': 'string filename | resource', -\ 'imagecreatefromgif(': 'string filename | resource', -\ 'imagecreatefromjpeg(': 'string filename | resource', -\ 'imagecreatefrompng(': 'string filename | resource', -\ 'imagecreatefromstring(': 'string image | resource', -\ 'imagecreatefromwbmp(': 'string filename | resource', -\ 'imagecreatefromxbm(': 'string filename | resource', -\ 'imagecreatefromxpm(': 'string filename | resource', -\ 'imagecreate(': 'int x_size, int y_size | resource', -\ 'imagecreatetruecolor(': 'int x_size, int y_size | resource', -\ 'imagedashedline(': 'resource image, int x1, int y1, int x2, int y2, int color | bool', -\ 'imagedestroy(': 'resource image | bool', -\ 'imageellipse(': 'resource image, int cx, int cy, int w, int h, int color | bool', -\ 'imagefilledarc(': 'resource image, int cx, int cy, int w, int h, int s, int e, int color, int style | bool', -\ 'imagefilledellipse(': 'resource image, int cx, int cy, int w, int h, int color | bool', -\ 'imagefilledpolygon(': 'resource image, array points, int num_points, int color | bool', -\ 'imagefilledrectangle(': 'resource image, int x1, int y1, int x2, int y2, int color | bool', -\ 'imagefill(': 'resource image, int x, int y, int color | bool', -\ 'imagefilltoborder(': 'resource image, int x, int y, int border, int color | bool', -\ 'imagefilter(': 'resource src_im, int filtertype [, int arg1 [, int arg2 [, int arg3]]] | bool', -\ 'imagefontheight(': 'int font | int', -\ 'imagefontwidth(': 'int font | int', -\ 'imageftbbox(': 'float size, float angle, string font_file, string text [, array extrainfo] | array', -\ 'imagefttext(': 'resource image, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo] | array', -\ 'imagegammacorrect(': 'resource image, float inputgamma, float outputgamma | bool', -\ 'imagegd2(': 'resource image [, string filename [, int chunk_size [, int type]]] | bool', -\ 'imagegd(': 'resource image [, string filename] | bool', -\ 'imagegif(': 'resource image [, string filename] | bool', -\ 'imageinterlace(': 'resource image [, int interlace] | int', -\ 'imageistruecolor(': 'resource image | bool', -\ 'imagejpeg(': 'resource image [, string filename [, int quality]] | bool', -\ 'imagelayereffect(': 'resource image, int effect | bool', -\ 'imageline(': 'resource image, int x1, int y1, int x2, int y2, int color | bool', -\ 'imageloadfont(': 'string file | int', -\ 'imagepalettecopy(': 'resource destination, resource source | void', -\ 'imagepng(': 'resource image [, string filename] | bool', -\ 'imagepolygon(': 'resource image, array points, int num_points, int color | bool', -\ 'imagepsbbox(': 'string text, int font, int size [, int space, int tightness, float angle] | array', -\ 'imagepscopyfont(': 'resource fontindex | int', -\ 'imagepsencodefont(': 'resource font_index, string encodingfile | bool', -\ 'imagepsextendfont(': 'int font_index, float extend | bool', -\ 'imagepsfreefont(': 'resource fontindex | bool', -\ 'imagepsloadfont(': 'string filename | resource', -\ 'imagepsslantfont(': 'resource font_index, float slant | bool', -\ 'imagepstext(': 'resource image, string text, resource font, int size, int foreground, int background, int x, int y [, int space, int tightness, float angle, int antialias_steps] | array', -\ 'imagerectangle(': 'resource image, int x1, int y1, int x2, int y2, int col | bool', -\ 'imagerotate(': 'resource src_im, float angle, int bgd_color [, int ignore_transparent] | resource', -\ 'imagesavealpha(': 'resource image, bool saveflag | bool', -\ 'imagesetbrush(': 'resource image, resource brush | bool', -\ 'imagesetpixel(': 'resource image, int x, int y, int color | bool', -\ 'imagesetstyle(': 'resource image, array style | bool', -\ 'imagesetthickness(': 'resource image, int thickness | bool', -\ 'imagesettile(': 'resource image, resource tile | bool', -\ 'imagestring(': 'resource image, int font, int x, int y, string s, int col | bool', -\ 'imagestringup(': 'resource image, int font, int x, int y, string s, int col | bool', -\ 'imagesx(': 'resource image | int', -\ 'imagesy(': 'resource image | int', -\ 'imagetruecolortopalette(': 'resource image, bool dither, int ncolors | bool', -\ 'imagettfbbox(': 'float size, float angle, string fontfile, string text | array', -\ 'imagettftext(': 'resource image, float size, float angle, int x, int y, int color, string fontfile, string text | array', -\ 'imagetypes(': 'void | int', -\ 'image_type_to_extension(': 'int imagetype [, bool include_dot] | string', -\ 'image_type_to_mime_type(': 'int imagetype | string', -\ 'imagewbmp(': 'resource image [, string filename [, int foreground]] | bool', -\ 'imagexbm(': 'resource image, string filename [, int foreground] | bool', -\ 'imap_8bit(': 'string string | string', -\ 'imap_alerts(': 'void | array', -\ 'imap_append(': 'resource imap_stream, string mbox, string message [, string options] | bool', -\ 'imap_base64(': 'string text | string', -\ 'imap_binary(': 'string string | string', -\ 'imap_body(': 'resource imap_stream, int msg_number [, int options] | string', -\ 'imap_bodystruct(': 'resource stream_id, int msg_no, string section | object', -\ 'imap_check(': 'resource imap_stream | object', -\ 'imap_clearflag_full(': 'resource stream, string sequence, string flag [, string options] | bool', -\ 'imap_close(': 'resource imap_stream [, int flag] | bool', -\ 'imap_createmailbox(': 'resource imap_stream, string mbox | bool', -\ 'imap_delete(': 'int imap_stream, int msg_number [, int options] | bool', -\ 'imap_deletemailbox(': 'resource imap_stream, string mbox | bool', -\ 'imap_errors(': 'void | array', -\ 'imap_expunge(': 'resource imap_stream | bool', -\ 'imap_fetchbody(': 'resource imap_stream, int msg_number, string part_number [, int options] | string', -\ 'imap_fetchheader(': 'resource imap_stream, int msgno [, int options] | string', -\ 'imap_fetch_overview(': 'resource imap_stream, string sequence [, int options] | array', -\ 'imap_fetchstructure(': 'resource imap_stream, int msg_number [, int options] | object', -\ 'imap_getacl(': 'resource stream_id, string mailbox | array', -\ 'imap_getmailboxes(': 'resource imap_stream, string ref, string pattern | array', -\ 'imap_get_quota(': 'resource imap_stream, string quota_root | array', -\ 'imap_get_quotaroot(': 'resource imap_stream, string quota_root | array', -\ 'imap_getsubscribed(': 'resource imap_stream, string ref, string pattern | array', -\ 'imap_headerinfo(': 'resource imap_stream, int msg_number [, int fromlength [, int subjectlength [, string defaulthost]]] | object', -\ 'imap_headers(': 'resource imap_stream | array', -\ 'imap_last_error(': 'void | string', -\ 'imap_list(': 'resource imap_stream, string ref, string pattern | array', -\ 'imap_listscan(': 'resource imap_stream, string ref, string pattern, string content | array', -\ 'imap_lsub(': 'resource imap_stream, string ref, string pattern | array', -\ 'imap_mailboxmsginfo(': 'resource imap_stream | object', -\ 'imap_mail_compose(': 'array envelope, array body | string', -\ 'imap_mail_copy(': 'resource imap_stream, string msglist, string mbox [, int options] | bool', -\ 'imap_mail(': 'string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]] | bool', -\ 'imap_mail_move(': 'resource imap_stream, string msglist, string mbox [, int options] | bool', -\ 'imap_mime_header_decode(': 'string text | array', -\ 'imap_msgno(': 'resource imap_stream, int uid | int', -\ 'imap_num_msg(': 'resource imap_stream | int', -\ 'imap_num_recent(': 'resource imap_stream | int', -\ 'imap_open(': 'string mailbox, string username, string password [, int options] | resource', -\ 'imap_ping(': 'resource imap_stream | bool', -\ 'imap_qprint(': 'string string | string', -\ 'imap_renamemailbox(': 'resource imap_stream, string old_mbox, string new_mbox | bool', -\ 'imap_reopen(': 'resource imap_stream, string mailbox [, int options] | bool', -\ 'imap_rfc822_parse_adrlist(': 'string address, string default_host | array', -\ 'imap_rfc822_parse_headers(': 'string headers [, string defaulthost] | object', -\ 'imap_rfc822_write_address(': 'string mailbox, string host, string personal | string', -\ 'imap_search(': 'resource imap_stream, string criteria [, int options [, string charset]] | array', -\ 'imap_setacl(': 'resource stream_id, string mailbox, string id, string rights | bool', -\ 'imap_setflag_full(': 'resource stream, string sequence, string flag [, string options] | bool', -\ 'imap_set_quota(': 'resource imap_stream, string quota_root, int quota_limit | bool', -\ 'imap_sort(': 'resource stream, int criteria, int reverse [, int options [, string search_criteria [, string charset]]] | array', -\ 'imap_status(': 'resource imap_stream, string mailbox, int options | object', -\ 'imap_subscribe(': 'resource imap_stream, string mbox | bool', -\ 'imap_thread(': 'resource stream_id [, int options] | array', -\ 'imap_timeout(': 'int timeout_type [, int timeout] | mixed', -\ 'imap_uid(': 'resource imap_stream, int msgno | int', -\ 'imap_undelete(': 'resource imap_stream, int msg_number [, int flags] | bool', -\ 'imap_unsubscribe(': 'string imap_stream, string mbox | bool', -\ 'imap_utf7_decode(': 'string text | string', -\ 'imap_utf7_encode(': 'string data | string', -\ 'imap_utf8(': 'string mime_encoded_text | string', -\ 'implode(': 'string glue, array pieces | string', -\ 'import_request_variables(': 'string types [, string prefix] | bool', -\ 'in_array(': 'mixed needle, array haystack [, bool strict] | bool', -\ 'inet_ntop(': 'string in_addr | string', -\ 'inet_pton(': 'string address | string', -\ 'ingres_autocommit(': '[resource link] | bool', -\ 'ingres_close(': '[resource link] | bool', -\ 'ingres_commit(': '[resource link] | bool', -\ 'ingres_connect(': '[string database [, string username [, string password]]] | resource', -\ 'ingres_cursor(': '[resource link] | string', -\ 'ingres_errno(': '[resource link] | int', -\ 'ingres_error(': '[resource link] | string', -\ 'ingres_errsqlstate(': '[resource link] | string', -\ 'ingres_fetch_array(': '[int result_type [, resource link]] | array', -\ 'ingres_fetch_object(': '[int result_type [, resource link]] | object', -\ 'ingres_fetch_row(': '[resource link] | array', -\ 'ingres_field_length(': 'int index [, resource link] | int', -\ 'ingres_field_name(': 'int index [, resource link] | string', -\ 'ingres_field_nullable(': 'int index [, resource link] | bool', -\ 'ingres_field_precision(': 'int index [, resource link] | int', -\ 'ingres_field_scale(': 'int index [, resource link] | int', -\ 'ingres_field_type(': 'int index [, resource link] | string', -\ 'ingres_num_fields(': '[resource link] | int', -\ 'ingres_num_rows(': '[resource link] | int', -\ 'ingres_pconnect(': '[string database [, string username [, string password]]] | resource', -\ 'ingres_query(': 'string query [, resource link] | bool', -\ 'ingres_rollback(': '[resource link] | bool', -\ 'ini_get_all(': '[string extension] | array', -\ 'ini_get(': 'string varname | string', -\ 'ini_restore(': 'string varname | void', -\ 'ini_set(': 'string varname, string newvalue | string', -\ 'interface_exists(': 'string interface_name [, bool autoload] | bool', -\ 'intval(': 'mixed var [, int base] | int', -\ 'ip2long(': 'string ip_address | int', -\ 'iptcembed(': 'string iptcdata, string jpeg_file_name [, int spool] | mixed', -\ 'iptcparse(': 'string iptcblock | array', -\ 'ircg_channel_mode(': 'resource connection, string channel, string mode_spec, string nick | bool', -\ 'ircg_disconnect(': 'resource connection, string reason | bool', -\ 'ircg_eval_ecmascript_params(': 'string params | array', -\ 'ircg_fetch_error_msg(': 'resource connection | array', -\ 'ircg_get_username(': 'resource connection | string', -\ 'ircg_html_encode(': 'string html_string [, bool auto_links [, bool conv_br]] | string', -\ 'ircg_ignore_add(': 'resource connection, string nick | void', -\ 'ircg_ignore_del(': 'resource connection, string nick | bool', -\ 'ircg_invite(': 'resource connection, string channel, string nickname | bool', -\ 'ircg_is_conn_alive(': 'resource connection | bool', -\ 'ircg_join(': 'resource connection, string channel [, string key] | bool', -\ 'ircg_kick(': 'resource connection, string channel, string nick, string reason | bool', -\ 'ircg_list(': 'resource connection, string channel | bool', -\ 'ircg_lookup_format_messages(': 'string name | bool', -\ 'ircg_lusers(': 'resource connection | bool', -\ 'ircg_msg(': 'resource connection, string recipient, string message [, bool suppress] | bool', -\ 'ircg_names(': 'int connection, string channel [, string target] | bool', -\ 'ircg_nick(': 'resource connection, string nick | bool', -\ 'ircg_nickname_escape(': 'string nick | string', -\ 'ircg_nickname_unescape(': 'string nick | string', -\ 'ircg_notice(': 'resource connection, string recipient, string message | bool', -\ 'ircg_oper(': 'resource connection, string name, string password | bool', -\ 'ircg_part(': 'resource connection, string channel | bool', -\ 'ircg_pconnect(': 'string username [, string server_ip [, int server_port [, string msg_format [, array ctcp_messages [, array user_settings [, bool bailout_on_trivial]]]]]] | resource', -\ 'ircg_register_format_messages(': 'string name, array messages | bool', -\ 'ircg_set_current(': 'resource connection | bool', -\ 'ircg_set_file(': 'resource connection, string path | bool', -\ 'ircg_set_on_die(': 'resource connection, string host, int port, string data | bool', -\ 'ircg_topic(': 'resource connection, string channel, string new_topic | bool', -\ 'ircg_who(': 'resource connection, string mask [, bool ops_only] | bool', -\ 'ircg_whois(': 'resource connection, string nick | bool', -\ 'is_a(': 'object object, string class_name | bool', -\ 'is_array(': 'mixed var | bool', -\ 'is_bool(': 'mixed var | bool', -\ 'is_callable(': 'mixed var [, bool syntax_only [, string &callable_name]] | bool', -\ 'is_dir(': 'string filename | bool', -\ 'is_executable(': 'string filename | bool', -\ 'is_file(': 'string filename | bool', -\ 'is_finite(': 'float val | bool', -\ 'is_float(': 'mixed var | bool', -\ 'is_infinite(': 'float val | bool', -\ 'is_int(': 'mixed var | bool', -\ 'is_link(': 'string filename | bool', -\ 'is_nan(': 'float val | bool', -\ 'is_null(': 'mixed var | bool', -\ 'is_numeric(': 'mixed var | bool', -\ 'is_object(': 'mixed var | bool', -\ 'is_readable(': 'string filename | bool', -\ 'is_resource(': 'mixed var | bool', -\ 'is_scalar(': 'mixed var | bool', -\ 'isset(': 'mixed var [, mixed var [, ...]] | bool', -\ 'is_soap_fault(': 'mixed obj | bool', -\ 'is_string(': 'mixed var | bool', -\ 'is_subclass_of(': 'mixed object, string class_name | bool', -\ 'is_uploaded_file(': 'string filename | bool', -\ 'is_writable(': 'string filename | bool', -\ 'iterator_count(': 'IteratorAggregate iterator | int', -\ 'iterator_to_array(': 'IteratorAggregate iterator | array', -\ 'java_last_exception_clear(': 'void | void', -\ 'java_last_exception_get(': 'void | object', -\ 'jddayofweek(': 'int julianday [, int mode] | mixed', -\ 'jdmonthname(': 'int julianday, int mode | string', -\ 'jdtofrench(': 'int juliandaycount | string', -\ 'jdtogregorian(': 'int julianday | string', -\ 'jdtojewish(': 'int juliandaycount [, bool hebrew [, int fl]] | string', -\ 'jdtojulian(': 'int julianday | string', -\ 'jdtounix(': 'int jday | int', -\ 'jewishtojd(': 'int month, int day, int year | int', -\ 'jpeg2wbmp(': 'string jpegname, string wbmpname, int d_height, int d_width, int threshold | int', -\ 'juliantojd(': 'int month, int day, int year | int', -\ 'kadm5_chpass_principal(': 'resource handle, string principal, string password | bool', -\ 'kadm5_create_principal(': 'resource handle, string principal [, string password [, array options]] | bool', -\ 'kadm5_delete_principal(': 'resource handle, string principal | bool', -\ 'kadm5_destroy(': 'resource handle | bool', -\ 'kadm5_flush(': 'resource handle | bool', -\ 'kadm5_get_policies(': 'resource handle | array', -\ 'kadm5_get_principal(': 'resource handle, string principal | array', -\ 'kadm5_get_principals(': 'resource handle | array', -\ 'kadm5_init_with_password(': 'string admin_server, string realm, string principal, string password | resource', -\ 'kadm5_modify_principal(': 'resource handle, string principal, array options | bool', -\ 'key(': 'array &array | mixed', -\ 'krsort(': 'array &array [, int sort_flags] | bool', -\ 'ksort(': 'array &array [, int sort_flags] | bool', -\ 'lcg_value(': 'void | float', -\ 'ldap_8859_to_t61(': 'string value | string', -\ 'ldap_add(': 'resource link_identifier, string dn, array entry | bool', -\ 'ldap_bind(': 'resource link_identifier [, string bind_rdn [, string bind_password]] | bool', -\ 'ldap_compare(': 'resource link_identifier, string dn, string attribute, string value | mixed', -\ 'ldap_connect(': '[string hostname [, int port]] | resource', -\ 'ldap_count_entries(': 'resource link_identifier, resource result_identifier | int', -\ 'ldap_delete(': 'resource link_identifier, string dn | bool', -\ 'ldap_dn2ufn(': 'string dn | string', -\ 'ldap_err2str(': 'int errno | string', -\ 'ldap_errno(': 'resource link_identifier | int', -\ 'ldap_error(': 'resource link_identifier | string', -\ 'ldap_explode_dn(': 'string dn, int with_attrib | array', -\ 'ldap_first_attribute(': 'resource link_identifier, resource result_entry_identifier, int &ber_identifier | string', -\ 'ldap_first_entry(': 'resource link_identifier, resource result_identifier | resource', -\ 'ldap_first_reference(': 'resource link, resource result | resource', -\ 'ldap_free_result(': 'resource result_identifier | bool', -\ 'ldap_get_attributes(': 'resource link_identifier, resource result_entry_identifier | array', -\ 'ldap_get_dn(': 'resource link_identifier, resource result_entry_identifier | string', -\ 'ldap_get_entries(': 'resource link_identifier, resource result_identifier | array', -\ 'ldap_get_option(': 'resource link_identifier, int option, mixed &retval | bool', -\ 'ldap_get_values(': 'resource link_identifier, resource result_entry_identifier, string attribute | array', -\ 'ldap_get_values_len(': 'resource link_identifier, resource result_entry_identifier, string attribute | array', -\ 'ldap_list(': 'resource link_identifier, string base_dn, string filter [, array attributes [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]] | resource', -\ 'ldap_mod_add(': 'resource link_identifier, string dn, array entry | bool', -\ 'ldap_mod_del(': 'resource link_identifier, string dn, array entry | bool', -\ 'ldap_modify(': 'resource link_identifier, string dn, array entry | bool', -\ 'ldap_mod_replace(': 'resource link_identifier, string dn, array entry | bool', -\ 'ldap_next_attribute(': 'resource link_identifier, resource result_entry_identifier, resource &ber_identifier | string', -\ 'ldap_next_entry(': 'resource link_identifier, resource result_entry_identifier | resource', -\ 'ldap_next_reference(': 'resource link, resource entry | resource', -\ 'ldap_parse_reference(': 'resource link, resource entry, array &referrals | bool', -\ 'ldap_parse_result(': 'resource link, resource result, int &errcode [, string &matcheddn [, string &errmsg [, array &referrals]]] | bool', -\ 'ldap_read(': 'resource link_identifier, string base_dn, string filter [, array attributes [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]] | resource', -\ 'ldap_rename(': 'resource link_identifier, string dn, string newrdn, string newparent, bool deleteoldrdn | bool', -\ 'ldap_sasl_bind(': 'resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authz_id [, string props]]]]]] | bool', -\ 'ldap_search(': 'resource link_identifier, string base_dn, string filter [, array attributes [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]] | resource', -\ 'ldap_set_option(': 'resource link_identifier, int option, mixed newval | bool', -\ 'ldap_set_rebind_proc(': 'resource link, callback callback | bool', -\ 'ldap_sort(': 'resource link, resource result, string sortfilter | bool', -\ 'ldap_start_tls(': 'resource link | bool', -\ 'ldap_t61_to_8859(': 'string value | string', -\ 'ldap_unbind(': 'resource link_identifier | bool', -\ 'levenshtein(': 'string str1, string str2 [, int cost_ins [, int cost_rep, int cost_del]] | int', -\ 'libxml_clear_errors(': 'void | void', -\ 'libxml_get_errors(': 'void | array', -\ 'libxml_get_last_error(': 'void | LibXMLError', -\ 'libxml_set_streams_context(': 'resource streams_context | void', -\ 'libxml_use_internal_errors(': '[bool use_errors] | bool', -\ 'link(': 'string target, string link | bool', -\ 'linkinfo(': 'string path | int', -\ 'list(': 'mixed varname, mixed ... | void', -\ 'localeconv(': 'void | array', -\ 'localtime(': '[int timestamp [, bool is_associative]] | array', -\ 'log10(': 'float arg | float', -\ 'log1p(': 'float number | float', -\ 'log(': 'float arg [, float base] | float', -\ 'long2ip(': 'int proper_address | string', -\ 'lstat(': 'string filename | array', -\ 'ltrim(': 'string str [, string charlist] | string', -\ 'lzf_compress(': 'string data | string', -\ 'lzf_decompress(': 'string data | string', -\ 'lzf_optimized_for(': 'void | int', -\ 'mail(': 'string to, string subject, string message [, string additional_headers [, string additional_parameters]] | bool', -\ 'mailparse_determine_best_xfer_encoding(': 'resource fp | string', -\ 'mailparse_msg_create(': 'void | resource', -\ 'mailparse_msg_extract_part_file(': 'resource rfc2045, string filename [, callback callbackfunc] | string', -\ 'mailparse_msg_extract_part(': 'resource rfc2045, string msgbody [, callback callbackfunc] | void', -\ 'mailparse_msg_free(': 'resource rfc2045buf | bool', -\ 'mailparse_msg_get_part_data(': 'resource rfc2045 | array', -\ 'mailparse_msg_get_part(': 'resource rfc2045, string mimesection | resource', -\ 'mailparse_msg_get_structure(': 'resource rfc2045 | array', -\ 'mailparse_msg_parse_file(': 'string filename | resource', -\ 'mailparse_msg_parse(': 'resource rfc2045buf, string data | bool', -\ 'mailparse_rfc822_parse_addresses(': 'string addresses | array', -\ 'mailparse_stream_encode(': 'resource sourcefp, resource destfp, string encoding | bool', -\ 'mailparse_uudecode_all(': 'resource fp | array', -\ 'maxdb_connect_errno(': 'void | int', -\ 'maxdb_connect_error(': 'void | string', -\ 'maxdb_debug(': 'string debug | void', -\ 'maxdb_disable_rpl_parse(': 'resource link | bool', -\ 'maxdb_dump_debug_info(': 'resource link | bool', -\ 'maxdb_embedded_connect(': '[string dbname] | resource', -\ 'maxdb_enable_reads_from_master(': 'resource link | bool', -\ 'maxdb_enable_rpl_parse(': 'resource link | bool', -\ 'maxdb_get_client_info(': 'void | string', -\ 'maxdb_get_client_version(': 'void | int', -\ 'maxdb_init(': 'void | resource', -\ 'maxdb_master_query(': 'resource link, string query | bool', -\ 'maxdb_more_results(': 'resource link | bool', -\ 'maxdb_next_result(': 'resource link | bool', -\ 'maxdb_report(': 'int flags | bool', -\ 'maxdb_rollback(': 'resource link | bool', -\ 'maxdb_rpl_parse_enabled(': 'resource link | int', -\ 'maxdb_rpl_probe(': 'resource link | bool', -\ 'maxdb_rpl_query_type(': 'resource link | int', -\ 'maxdb_select_db(': 'resource link, string dbname | bool', -\ 'maxdb_send_query(': 'resource link, string query | bool', -\ 'maxdb_server_end(': 'void | void', -\ 'maxdb_server_init(': '[array server [, array groups]] | bool', -\ 'maxdb_stmt_sqlstate(': 'resource stmt | string', -\ 'max(': 'number arg1, number arg2 [, number ...] | mixed', -\ 'mb_convert_case(': 'string str, int mode [, string encoding] | string', -\ 'mb_convert_encoding(': 'string str, string to_encoding [, mixed from_encoding] | string', -\ 'mb_convert_kana(': 'string str [, string option [, string encoding]] | string', -\ 'mb_convert_variables(': 'string to_encoding, mixed from_encoding, mixed &vars [, mixed &...] | string', -\ 'mb_decode_mimeheader(': 'string str | string', -\ 'mb_decode_numericentity(': 'string str, array convmap [, string encoding] | string', -\ 'mb_detect_encoding(': 'string str [, mixed encoding_list [, bool strict]] | string', -\ 'mb_detect_order(': '[mixed encoding_list] | mixed', -\ 'mb_encode_mimeheader(': 'string str [, string charset [, string transfer_encoding [, string linefeed]]] | string', -\ 'mb_encode_numericentity(': 'string str, array convmap [, string encoding] | string', -\ 'mb_ereg(': 'string pattern, string string [, array regs] | int', -\ 'mb_eregi(': 'string pattern, string string [, array regs] | int', -\ 'mb_eregi_replace(': 'string pattern, string replace, string string [, string option] | string', -\ 'mb_ereg_match(': 'string pattern, string string [, string option] | bool', -\ 'mb_ereg_replace(': 'string pattern, string replacement, string string [, string option] | string', -\ 'mb_ereg_search_getpos(': 'void | int', -\ 'mb_ereg_search_getregs(': 'void | array', -\ 'mb_ereg_search(': '[string pattern [, string option]] | bool', -\ 'mb_ereg_search_init(': 'string string [, string pattern [, string option]] | bool', -\ 'mb_ereg_search_pos(': '[string pattern [, string option]] | array', -\ 'mb_ereg_search_regs(': '[string pattern [, string option]] | array', -\ 'mb_ereg_search_setpos(': 'int position | bool', -\ 'mb_get_info(': '[string type] | mixed', -\ 'mb_http_input(': '[string type] | mixed', -\ 'mb_http_output(': '[string encoding] | mixed', -\ 'mb_internal_encoding(': '[string encoding] | mixed', -\ 'mb_language(': '[string language] | mixed', -\ 'mb_list_encodings(': 'void | array', -\ 'mb_output_handler(': 'string contents, int status | string', -\ 'mb_parse_str(': 'string encoded_string [, array &result] | bool', -\ 'mb_preferred_mime_name(': 'string encoding | string', -\ 'mb_regex_encoding(': '[string encoding] | mixed', -\ 'mb_regex_set_options(': '[string options] | string', -\ 'mb_send_mail(': 'string to, string subject, string message [, string additional_headers [, string additional_parameter]] | bool', -\ 'mb_split(': 'string pattern, string string [, int limit] | array', -\ 'mb_strcut(': 'string str, int start [, int length [, string encoding]] | string', -\ 'mb_strimwidth(': 'string str, int start, int width [, string trimmarker [, string encoding]] | string', -\ 'mb_strlen(': 'string str [, string encoding] | int', -\ 'mb_strpos(': 'string haystack, string needle [, int offset [, string encoding]] | int', -\ 'mb_strrpos(': 'string haystack, string needle [, string encoding] | int', -\ 'mb_strtolower(': 'string str [, string encoding] | string', -\ 'mb_strtoupper(': 'string str [, string encoding] | string', -\ 'mb_strwidth(': 'string str [, string encoding] | int', -\ 'mb_substitute_character(': '[mixed substrchar] | mixed', -\ 'mb_substr_count(': 'string haystack, string needle [, string encoding] | int', -\ 'mb_substr(': 'string str, int start [, int length [, string encoding]] | string', -\ 'mcal_append_event(': 'int mcal_stream | int', -\ 'mcal_close(': 'int mcal_stream [, int flags] | bool', -\ 'mcal_create_calendar(': 'int stream, string calendar | bool', -\ 'mcal_date_compare(': 'int a_year, int a_month, int a_day, int b_year, int b_month, int b_day | int', -\ 'mcal_date_valid(': 'int year, int month, int day | bool', -\ 'mcal_day_of_week(': 'int year, int month, int day | int', -\ 'mcal_day_of_year(': 'int year, int month, int day | int', -\ 'mcal_days_in_month(': 'int month, int leap_year | int', -\ 'mcal_delete_calendar(': 'int stream, string calendar | bool', -\ 'mcal_delete_event(': 'int mcal_stream, int event_id | bool', -\ 'mcal_event_add_attribute(': 'int stream, string attribute, string value | bool', -\ 'mcal_event_init(': 'int stream | void', -\ 'mcal_event_set_alarm(': 'int stream, int alarm | void', -\ 'mcal_event_set_category(': 'int stream, string category | void', -\ 'mcal_event_set_class(': 'int stream, int class | void', -\ 'mcal_event_set_description(': 'int stream, string description | void', -\ 'mcal_event_set_end(': 'int stream, int year, int month, int day [, int hour [, int min [, int sec]]] | void', -\ 'mcal_event_set_recur_daily(': 'int stream, int year, int month, int day, int interval | void', -\ 'mcal_event_set_recur_monthly_mday(': 'int stream, int year, int month, int day, int interval | void', -\ 'mcal_event_set_recur_monthly_wday(': 'int stream, int year, int month, int day, int interval | void', -\ 'mcal_event_set_recur_none(': 'int stream | void', -\ 'mcal_event_set_recur_weekly(': 'int stream, int year, int month, int day, int interval, int weekdays | void', -\ 'mcal_event_set_recur_yearly(': 'int stream, int year, int month, int day, int interval | void', -\ 'mcal_event_set_start(': 'int stream, int year, int month, int day [, int hour [, int min [, int sec]]] | void', -\ 'mcal_event_set_title(': 'int stream, string title | void', -\ 'mcal_expunge(': 'int stream | bool', -\ 'mcal_fetch_current_stream_event(': 'int stream | object', -\ 'mcal_fetch_event(': 'int mcal_stream, int event_id [, int options] | object', -\ 'mcal_is_leap_year(': 'int year | bool', -\ 'mcal_list_alarms(': 'int mcal_stream [, int begin_year, int begin_month, int begin_day, int end_year, int end_month, int end_day] | array', -\ 'mcal_list_events(': 'int mcal_stream [, int begin_year, int begin_month, int begin_day, int end_year, int end_month, int end_day] | array', -\ 'mcal_next_recurrence(': 'int stream, int weekstart, array next | object', -\ 'mcal_open(': 'string calendar, string username, string password [, int options] | int', -\ 'mcal_popen(': 'string calendar, string username, string password [, int options] | int', -\ 'mcal_rename_calendar(': 'int stream, string old_name, string new_name | bool', -\ 'mcal_reopen(': 'int mcal_stream, string calendar [, int options] | bool', -\ 'mcal_snooze(': 'int stream_id, int event_id | bool', -\ 'mcal_store_event(': 'int mcal_stream | int', -\ 'mcal_time_valid(': 'int hour, int minutes, int seconds | bool', -\ 'mcal_week_of_year(': 'int day, int month, int year | int', -\ 'm_checkstatus(': 'resource conn, int identifier | int', -\ 'm_completeauthorizations(': 'resource conn, int &array | int', -\ 'm_connect(': 'resource conn | int', -\ 'm_connectionerror(': 'resource conn | string', -\ 'mcrypt_cbc(': 'int cipher, string key, string data, int mode [, string iv] | string', -\ 'mcrypt_cfb(': 'int cipher, string key, string data, int mode, string iv | string', -\ 'mcrypt_create_iv(': 'int size [, int source] | string', -\ 'mcrypt_decrypt(': 'string cipher, string key, string data, string mode [, string iv] | string', -\ 'mcrypt_ecb(': 'int cipher, string key, string data, int mode | string', -\ 'mcrypt_enc_get_algorithms_name(': 'resource td | string', -\ 'mcrypt_enc_get_block_size(': 'resource td | int', -\ 'mcrypt_enc_get_iv_size(': 'resource td | int', -\ 'mcrypt_enc_get_key_size(': 'resource td | int', -\ 'mcrypt_enc_get_modes_name(': 'resource td | string', -\ 'mcrypt_enc_get_supported_key_sizes(': 'resource td | array', -\ 'mcrypt_enc_is_block_algorithm(': 'resource td | bool', -\ 'mcrypt_enc_is_block_algorithm_mode(': 'resource td | bool', -\ 'mcrypt_enc_is_block_mode(': 'resource td | bool', -\ 'mcrypt_encrypt(': 'string cipher, string key, string data, string mode [, string iv] | string', -\ 'mcrypt_enc_self_test(': 'resource td | int', -\ 'mcrypt_generic_deinit(': 'resource td | bool', -\ 'mcrypt_generic_end(': 'resource td | bool', -\ 'mcrypt_generic(': 'resource td, string data | string', -\ 'mcrypt_generic_init(': 'resource td, string key, string iv | int', -\ 'mcrypt_get_block_size(': 'int cipher | int', -\ 'mcrypt_get_cipher_name(': 'int cipher | string', -\ 'mcrypt_get_iv_size(': 'string cipher, string mode | int', -\ 'mcrypt_get_key_size(': 'int cipher | int', -\ 'mcrypt_list_algorithms(': '[string lib_dir] | array', -\ 'mcrypt_list_modes(': '[string lib_dir] | array', -\ 'mcrypt_module_close(': 'resource td | bool', -\ 'mcrypt_module_get_algo_block_size(': 'string algorithm [, string lib_dir] | int', -\ 'mcrypt_module_get_algo_key_size(': 'string algorithm [, string lib_dir] | int', -\ 'mcrypt_module_get_supported_key_sizes(': 'string algorithm [, string lib_dir] | array', -\ 'mcrypt_module_is_block_algorithm(': 'string algorithm [, string lib_dir] | bool', -\ 'mcrypt_module_is_block_algorithm_mode(': 'string mode [, string lib_dir] | bool', -\ 'mcrypt_module_is_block_mode(': 'string mode [, string lib_dir] | bool', -\ 'mcrypt_module_open(': 'string algorithm, string algorithm_directory, string mode, string mode_directory | resource', -\ 'mcrypt_module_self_test(': 'string algorithm [, string lib_dir] | bool', -\ 'mcrypt_ofb(': 'int cipher, string key, string data, int mode, string iv | string', -\ 'md5_file(': 'string filename [, bool raw_output] | string', -\ 'md5(': 'string str [, bool raw_output] | string', -\ 'mdecrypt_generic(': 'resource td, string data | string', -\ 'm_deletetrans(': 'resource conn, int identifier | bool', -\ 'm_destroyconn(': 'resource conn | bool', -\ 'm_destroyengine(': 'void | void', -\ 'memcache_debug(': 'bool on_off | bool', -\ 'memory_get_usage(': 'void | int', -\ 'metaphone(': 'string str [, int phones] | string', -\ 'method_exists(': 'object object, string method_name | bool', -\ 'm_getcellbynum(': 'resource conn, int identifier, int column, int row | string', -\ 'm_getcell(': 'resource conn, int identifier, string column, int row | string', -\ 'm_getcommadelimited(': 'resource conn, int identifier | string', -\ 'm_getheader(': 'resource conn, int identifier, int column_num | string', -\ 'mhash_count(': 'void | int', -\ 'mhash_get_block_size(': 'int hash | int', -\ 'mhash_get_hash_name(': 'int hash | string', -\ 'mhash(': 'int hash, string data [, string key] | string', -\ 'mhash_keygen_s2k(': 'int hash, string password, string salt, int bytes | string', -\ 'microtime(': '[bool get_as_float] | mixed', -\ 'mime_content_type(': 'string filename | string', -\ 'ming_keypress(': 'string str | int', -\ 'ming_setcubicthreshold(': 'int threshold | void', -\ 'ming_setscale(': 'int scale | void', -\ 'ming_useConstants(': 'int use | void', -\ 'ming_useswfversion(': 'int version | void', -\ 'min(': 'number arg1, number arg2 [, number ...] | mixed', -\ 'm_initconn(': 'void | resource', -\ 'm_initengine(': 'string location | int', -\ 'm_iscommadelimited(': 'resource conn, int identifier | int', -\ 'mkdir(': 'string pathname [, int mode [, bool recursive [, resource context]]] | bool', -\ 'mktime(': '[int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] | int', -\ 'm_maxconntimeout(': 'resource conn, int secs | bool', -\ 'm_monitor(': 'resource conn | int', -\ 'm_numcolumns(': 'resource conn, int identifier | int', -\ 'm_numrows(': 'resource conn, int identifier | int', -\ 'money_format(': 'string format, float number | string', -\ 'move_uploaded_file(': 'string filename, string destination | bool', -\ 'm_parsecommadelimited(': 'resource conn, int identifier | int', -\ 'm_responsekeys(': 'resource conn, int identifier | array', -\ 'm_responseparam(': 'resource conn, int identifier, string key | string', -\ 'm_returnstatus(': 'resource conn, int identifier | int', -\ 'msession_connect(': 'string host, string port | bool', -\ 'msession_count(': 'void | int', -\ 'msession_create(': 'string session | bool', -\ 'msession_destroy(': 'string name | bool', -\ 'msession_disconnect(': 'void | void', -\ 'msession_find(': 'string name, string value | array', -\ 'msession_get_array(': 'string session | array', -\ 'msession_get_data(': 'string session | string', -\ 'msession_get(': 'string session, string name, string value | string', -\ 'msession_inc(': 'string session, string name | string', -\ 'msession_list(': 'void | array', -\ 'msession_listvar(': 'string name | array', -\ 'msession_lock(': 'string name | int', -\ 'msession_plugin(': 'string session, string val [, string param] | string', -\ 'msession_randstr(': 'int param | string', -\ 'msession_set_array(': 'string session, array tuples | void', -\ 'msession_set_data(': 'string session, string value | bool', -\ 'msession_set(': 'string session, string name, string value | bool', -\ 'msession_timeout(': 'string session [, int param] | int', -\ 'msession_uniq(': 'int param | string', -\ 'msession_unlock(': 'string session, int key | int', -\ 'm_setblocking(': 'resource conn, int tf | int', -\ 'm_setdropfile(': 'resource conn, string directory | int', -\ 'm_setip(': 'resource conn, string host, int port | int', -\ 'm_setssl_cafile(': 'resource conn, string cafile | int', -\ 'm_setssl_files(': 'resource conn, string sslkeyfile, string sslcertfile | int', -\ 'm_setssl(': 'resource conn, string host, int port | int', -\ 'm_settimeout(': 'resource conn, int seconds | int', -\ 'msg_get_queue(': 'int key [, int perms] | resource', -\ 'msg_receive(': 'resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed &message [, bool unserialize [, int flags [, int &errorcode]]] | bool', -\ 'msg_remove_queue(': 'resource queue | bool', -\ 'msg_send(': 'resource queue, int msgtype, mixed message [, bool serialize [, bool blocking [, int &errorcode]]] | bool', -\ 'msg_set_queue(': 'resource queue, array data | bool', -\ 'msg_stat_queue(': 'resource queue | array', -\ 'msql_affected_rows(': 'resource result | int', -\ 'msql_close(': '[resource link_identifier] | bool', -\ 'msql_connect(': '[string hostname] | resource', -\ 'msql_create_db(': 'string database_name [, resource link_identifier] | bool', -\ 'msql_data_seek(': 'resource result, int row_number | bool', -\ 'msql_db_query(': 'string database, string query [, resource link_identifier] | resource', -\ 'msql_drop_db(': 'string database_name [, resource link_identifier] | bool', -\ 'msql_error(': 'void | string', -\ 'msql_fetch_array(': 'resource result [, int result_type] | array', -\ 'msql_fetch_field(': 'resource result [, int field_offset] | object', -\ 'msql_fetch_object(': 'resource result | object', -\ 'msql_fetch_row(': 'resource result | array', -\ 'msql_field_flags(': 'resource result, int field_offset | string', -\ 'msql_field_len(': 'resource result, int field_offset | int', -\ 'msql_field_name(': 'resource result, int field_offset | string', -\ 'msql_field_seek(': 'resource result, int field_offset | bool', -\ 'msql_field_table(': 'resource result, int field_offset | int', -\ 'msql_field_type(': 'resource result, int field_offset | string', -\ 'msql_free_result(': 'resource result | bool', -\ 'msql_list_dbs(': '[resource link_identifier] | resource', -\ 'msql_list_fields(': 'string database, string tablename [, resource link_identifier] | resource', -\ 'msql_list_tables(': 'string database [, resource link_identifier] | resource', -\ 'msql_num_fields(': 'resource result | int', -\ 'msql_num_rows(': 'resource query_identifier | int', -\ 'msql_pconnect(': '[string hostname] | resource', -\ 'msql_query(': 'string query [, resource link_identifier] | resource', -\ 'msql_result(': 'resource result, int row [, mixed field] | string', -\ 'msql_select_db(': 'string database_name [, resource link_identifier] | bool', -\ 'm_sslcert_gen_hash(': 'string filename | string', -\ 'mssql_bind(': 'resource stmt, string param_name, mixed &var, int type [, int is_output [, int is_null [, int maxlen]]] | bool', -\ 'mssql_close(': '[resource link_identifier] | bool', -\ 'mssql_connect(': '[string servername [, string username [, string password]]] | resource', -\ 'mssql_data_seek(': 'resource result_identifier, int row_number | bool', -\ 'mssql_execute(': 'resource stmt [, bool skip_results] | mixed', -\ 'mssql_fetch_array(': 'resource result [, int result_type] | array', -\ 'mssql_fetch_assoc(': 'resource result_id | array', -\ 'mssql_fetch_batch(': 'resource result_index | int', -\ 'mssql_fetch_field(': 'resource result [, int field_offset] | object', -\ 'mssql_fetch_object(': 'resource result | object', -\ 'mssql_fetch_row(': 'resource result | array', -\ 'mssql_field_length(': 'resource result [, int offset] | int', -\ 'mssql_field_name(': 'resource result [, int offset] | string', -\ 'mssql_field_seek(': 'resource result, int field_offset | bool', -\ 'mssql_field_type(': 'resource result [, int offset] | string', -\ 'mssql_free_result(': 'resource result | bool', -\ 'mssql_free_statement(': 'resource statement | bool', -\ 'mssql_get_last_message(': 'void | string', -\ 'mssql_guid_string(': 'string binary [, int short_format] | string', -\ 'mssql_init(': 'string sp_name [, resource conn_id] | resource', -\ 'mssql_min_error_severity(': 'int severity | void', -\ 'mssql_min_message_severity(': 'int severity | void', -\ 'mssql_next_result(': 'resource result_id | bool', -\ 'mssql_num_fields(': 'resource result | int', -\ 'mssql_num_rows(': 'resource result | int', -\ 'mssql_pconnect(': '[string servername [, string username [, string password]]] | resource', -\ 'mssql_query(': 'string query [, resource link_identifier [, int batch_size]] | mixed', -\ 'mssql_result(': 'resource result, int row, mixed field | string', -\ 'mssql_rows_affected(': 'resource conn_id | int', -\ 'mssql_select_db(': 'string database_name [, resource link_identifier] | bool', -\ 'mt_getrandmax(': 'void | int', -\ 'mt_rand(': '[int min, int max] | int', -\ 'm_transactionssent(': 'resource conn | int', -\ 'm_transinqueue(': 'resource conn | int', -\ 'm_transkeyval(': 'resource conn, int identifier, string key, string value | int', -\ 'm_transnew(': 'resource conn | int', -\ 'm_transsend(': 'resource conn, int identifier | int', -\ 'mt_srand(': '[int seed] | void', -\ 'muscat_close(': 'resource muscat_handle | void', -\ 'muscat_get(': 'resource muscat_handle | string', -\ 'muscat_give(': 'resource muscat_handle, string string | void', -\ 'muscat_setup(': 'int size [, string muscat_dir] | resource', -\ 'muscat_setup_net(': 'string muscat_host | resource', -\ 'm_uwait(': 'int microsecs | int', -\ 'm_validateidentifier(': 'resource conn, int tf | int', -\ 'm_verifyconnection(': 'resource conn, int tf | bool', -\ 'm_verifysslcert(': 'resource conn, int tf | bool', -\ 'mysql_affected_rows(': '[resource link_identifier] | int', -\ 'mysql_change_user(': 'string user, string password [, string database [, resource link_identifier]] | int', -\ 'mysql_client_encoding(': '[resource link_identifier] | string', -\ 'mysql_close(': '[resource link_identifier] | bool', -\ 'mysql_connect(': '[string server [, string username [, string password [, bool new_link [, int client_flags]]]]] | resource', -\ 'mysql_create_db(': 'string database_name [, resource link_identifier] | bool', -\ 'mysql_data_seek(': 'resource result, int row_number | bool', -\ 'mysql_db_name(': 'resource result, int row [, mixed field] | string', -\ 'mysql_db_query(': 'string database, string query [, resource link_identifier] | resource', -\ 'mysql_drop_db(': 'string database_name [, resource link_identifier] | bool', -\ 'mysql_errno(': '[resource link_identifier] | int', -\ 'mysql_error(': '[resource link_identifier] | string', -\ 'mysql_escape_string(': 'string unescaped_string | string', -\ 'mysql_fetch_array(': 'resource result [, int result_type] | array', -\ 'mysql_fetch_assoc(': 'resource result | array', -\ 'mysql_fetch_field(': 'resource result [, int field_offset] | object', -\ 'mysql_fetch_lengths(': 'resource result | array', -\ 'mysql_fetch_object(': 'resource result | object', -\ 'mysql_fetch_row(': 'resource result | array', -\ 'mysql_field_flags(': 'resource result, int field_offset | string', -\ 'mysql_field_len(': 'resource result, int field_offset | int', -\ 'mysql_field_name(': 'resource result, int field_offset | string', -\ 'mysql_field_seek(': 'resource result, int field_offset | bool', -\ 'mysql_field_table(': 'resource result, int field_offset | string', -\ 'mysql_field_type(': 'resource result, int field_offset | string', -\ 'mysql_free_result(': 'resource result | bool', -\ 'mysql_get_client_info(': 'void | string', -\ 'mysql_get_host_info(': '[resource link_identifier] | string', -\ 'mysql_get_proto_info(': '[resource link_identifier] | int', -\ 'mysql_get_server_info(': '[resource link_identifier] | string', -\ 'mysqli_connect_errno(': 'void | int', -\ 'mysqli_connect_error(': 'void | string', -\ 'mysqli_debug(': 'string debug | bool', -\ 'mysqli_disable_rpl_parse(': 'mysqli link | bool', -\ 'mysqli_dump_debug_info(': 'mysqli link | bool', -\ 'mysqli_embedded_connect(': '[string dbname] | mysqli', -\ 'mysqli_enable_reads_from_master(': 'mysqli link | bool', -\ 'mysqli_enable_rpl_parse(': 'mysqli link | bool', -\ 'mysqli_get_client_info(': 'void | string', -\ 'mysqli_get_client_version(': 'void | int', -\ 'mysqli_init(': 'void | mysqli', -\ 'mysqli_master_query(': 'mysqli link, string query | bool', -\ 'mysqli_more_results(': 'mysqli link | bool', -\ 'mysqli_next_result(': 'mysqli link | bool', -\ 'mysql_info(': '[resource link_identifier] | string', -\ 'mysql_insert_id(': '[resource link_identifier] | int', -\ 'mysqli_report(': 'int flags | bool', -\ 'mysqli_rollback(': 'mysqli link | bool', -\ 'mysqli_rpl_parse_enabled(': 'mysqli link | int', -\ 'mysqli_rpl_probe(': 'mysqli link | bool', -\ 'mysqli_select_db(': 'mysqli link, string dbname | bool', -\ 'mysqli_server_end(': 'void | void', -\ 'mysqli_server_init(': '[array server [, array groups]] | bool', -\ 'mysqli_set_charset(': 'mysqli link, string charset | bool', -\ 'mysqli_stmt_sqlstate(': 'mysqli_stmt stmt | string', -\ 'mysql_list_dbs(': '[resource link_identifier] | resource', -\ 'mysql_list_fields(': 'string database_name, string table_name [, resource link_identifier] | resource', -\ 'mysql_list_processes(': '[resource link_identifier] | resource', -\ 'mysql_list_tables(': 'string database [, resource link_identifier] | resource', -\ 'mysql_num_fields(': 'resource result | int', -\ 'mysql_num_rows(': 'resource result | int', -\ 'mysql_pconnect(': '[string server [, string username [, string password [, int client_flags]]]] | resource', -\ 'mysql_ping(': '[resource link_identifier] | bool', -\ 'mysql_query(': 'string query [, resource link_identifier] | resource', -\ 'mysql_real_escape_string(': 'string unescaped_string [, resource link_identifier] | string', -\ 'mysql_result(': 'resource result, int row [, mixed field] | string', -\ 'mysql_select_db(': 'string database_name [, resource link_identifier] | bool', -\ 'mysql_stat(': '[resource link_identifier] | string', -\ 'mysql_tablename(': 'resource result, int i | string', -\ 'mysql_thread_id(': '[resource link_identifier] | int', -\ 'mysql_unbuffered_query(': 'string query [, resource link_identifier] | resource', -\ 'natcasesort(': 'array &array | bool', -\ 'natsort(': 'array &array | bool', -\ 'ncurses_addch(': 'int ch | int', -\ 'ncurses_addchnstr(': 'string s, int n | int', -\ 'ncurses_addchstr(': 'string s | int', -\ 'ncurses_addnstr(': 'string s, int n | int', -\ 'ncurses_addstr(': 'string text | int', -\ 'ncurses_assume_default_colors(': 'int fg, int bg | int', -\ 'ncurses_attroff(': 'int attributes | int', -\ 'ncurses_attron(': 'int attributes | int', -\ 'ncurses_attrset(': 'int attributes | int', -\ 'ncurses_baudrate(': 'void | int', -\ 'ncurses_beep(': 'void | int', -\ 'ncurses_bkgd(': 'int attrchar | int', -\ 'ncurses_bkgdset(': 'int attrchar | void', -\ 'ncurses_border(': 'int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner | int', -\ 'ncurses_bottom_panel(': 'resource panel | int', -\ 'ncurses_can_change_color(': 'void | bool', -\ 'ncurses_cbreak(': 'void | bool', -\ 'ncurses_clear(': 'void | bool', -\ 'ncurses_clrtobot(': 'void | bool', -\ 'ncurses_clrtoeol(': 'void | bool', -\ 'ncurses_color_content(': 'int color, int &r, int &g, int &b | int', -\ 'ncurses_color_set(': 'int pair | int', -\ 'ncurses_curs_set(': 'int visibility | int', -\ 'ncurses_define_key(': 'string definition, int keycode | int', -\ 'ncurses_def_prog_mode(': 'void | bool', -\ 'ncurses_def_shell_mode(': 'void | bool', -\ 'ncurses_delay_output(': 'int milliseconds | int', -\ 'ncurses_delch(': 'void | bool', -\ 'ncurses_deleteln(': 'void | bool', -\ 'ncurses_del_panel(': 'resource panel | bool', -\ 'ncurses_delwin(': 'resource window | bool', -\ 'ncurses_doupdate(': 'void | bool', -\ 'ncurses_echochar(': 'int character | int', -\ 'ncurses_echo(': 'void | bool', -\ 'ncurses_end(': 'void | int', -\ 'ncurses_erasechar(': 'void | string', -\ 'ncurses_erase(': 'void | bool', -\ 'ncurses_filter(': 'void | void', -\ 'ncurses_flash(': 'void | bool', -\ 'ncurses_flushinp(': 'void | bool', -\ 'ncurses_getch(': 'void | int', -\ 'ncurses_getmaxyx(': 'resource window, int &y, int &x | void', -\ 'ncurses_getmouse(': 'array &mevent | bool', -\ 'ncurses_getyx(': 'resource window, int &y, int &x | void', -\ 'ncurses_halfdelay(': 'int tenth | int', -\ 'ncurses_has_colors(': 'void | bool', -\ 'ncurses_has_ic(': 'void | bool', -\ 'ncurses_has_il(': 'void | bool', -\ 'ncurses_has_key(': 'int keycode | int', -\ 'ncurses_hide_panel(': 'resource panel | int', -\ 'ncurses_hline(': 'int charattr, int n | int', -\ 'ncurses_inch(': 'void | string', -\ 'ncurses_init_color(': 'int color, int r, int g, int b | int', -\ 'ncurses_init(': 'void | void', -\ 'ncurses_init_pair(': 'int pair, int fg, int bg | int', -\ 'ncurses_insch(': 'int character | int', -\ 'ncurses_insdelln(': 'int count | int', -\ 'ncurses_insertln(': 'void | bool', -\ 'ncurses_insstr(': 'string text | int', -\ 'ncurses_instr(': 'string &buffer | int', -\ 'ncurses_isendwin(': 'void | bool', -\ 'ncurses_keyok(': 'int keycode, bool enable | int', -\ 'ncurses_keypad(': 'resource window, bool bf | int', -\ 'ncurses_killchar(': 'void | string', -\ 'ncurses_longname(': 'void | string', -\ 'ncurses_meta(': 'resource window, bool 8bit | int', -\ 'ncurses_mouseinterval(': 'int milliseconds | int', -\ 'ncurses_mousemask(': 'int newmask, int &oldmask | int', -\ 'ncurses_mouse_trafo(': 'int &y, int &x, bool toscreen | bool', -\ 'ncurses_move(': 'int y, int x | int', -\ 'ncurses_move_panel(': 'resource panel, int startx, int starty | int', -\ 'ncurses_mvaddch(': 'int y, int x, int c | int', -\ 'ncurses_mvaddchnstr(': 'int y, int x, string s, int n | int', -\ 'ncurses_mvaddchstr(': 'int y, int x, string s | int', -\ 'ncurses_mvaddnstr(': 'int y, int x, string s, int n | int', -\ 'ncurses_mvaddstr(': 'int y, int x, string s | int', -\ 'ncurses_mvcur(': 'int old_y, int old_x, int new_y, int new_x | int', -\ 'ncurses_mvdelch(': 'int y, int x | int', -\ 'ncurses_mvgetch(': 'int y, int x | int', -\ 'ncurses_mvhline(': 'int y, int x, int attrchar, int n | int', -\ 'ncurses_mvinch(': 'int y, int x | int', -\ 'ncurses_mvvline(': 'int y, int x, int attrchar, int n | int', -\ 'ncurses_mvwaddstr(': 'resource window, int y, int x, string text | int', -\ 'ncurses_napms(': 'int milliseconds | int', -\ 'ncurses_newpad(': 'int rows, int cols | resource', -\ 'ncurses_new_panel(': 'resource window | resource', -\ 'ncurses_newwin(': 'int rows, int cols, int y, int x | resource', -\ 'ncurses_nl(': 'void | bool', -\ 'ncurses_nocbreak(': 'void | bool', -\ 'ncurses_noecho(': 'void | bool', -\ 'ncurses_nonl(': 'void | bool', -\ 'ncurses_noqiflush(': 'void | void', -\ 'ncurses_noraw(': 'void | bool', -\ 'ncurses_pair_content(': 'int pair, int &f, int &b | int', -\ 'ncurses_panel_above(': 'resource panel | resource', -\ 'ncurses_panel_below(': 'resource panel | resource', -\ 'ncurses_panel_window(': 'resource panel | resource', -\ 'ncurses_pnoutrefresh(': 'resource pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol | int', -\ 'ncurses_prefresh(': 'resource pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol | int', -\ 'ncurses_putp(': 'string text | int', -\ 'ncurses_qiflush(': 'void | void', -\ 'ncurses_raw(': 'void | bool', -\ 'ncurses_refresh(': 'int ch | int', -\ 'ncurses_replace_panel(': 'resource panel, resource window | int', -\ 'ncurses_reset_prog_mode(': 'void | int', -\ 'ncurses_reset_shell_mode(': 'void | int', -\ 'ncurses_resetty(': 'void | bool', -\ 'ncurses_savetty(': 'void | bool', -\ 'ncurses_scr_dump(': 'string filename | int', -\ 'ncurses_scr_init(': 'string filename | int', -\ 'ncurses_scrl(': 'int count | int', -\ 'ncurses_scr_restore(': 'string filename | int', -\ 'ncurses_scr_set(': 'string filename | int', -\ 'ncurses_show_panel(': 'resource panel | int', -\ 'ncurses_slk_attr(': 'void | bool', -\ 'ncurses_slk_attroff(': 'int intarg | int', -\ 'ncurses_slk_attron(': 'int intarg | int', -\ 'ncurses_slk_attrset(': 'int intarg | int', -\ 'ncurses_slk_clear(': 'void | bool', -\ 'ncurses_slk_color(': 'int intarg | int', -\ 'ncurses_slk_init(': 'int format | bool', -\ 'ncurses_slk_noutrefresh(': 'void | bool', -\ 'ncurses_slk_refresh(': 'void | bool', -\ 'ncurses_slk_restore(': 'void | bool', -\ 'ncurses_slk_set(': 'int labelnr, string label, int format | bool', -\ 'ncurses_slk_touch(': 'void | bool', -\ 'ncurses_standend(': 'void | int', -\ 'ncurses_standout(': 'void | int', -\ 'ncurses_start_color(': 'void | int', -\ 'ncurses_termattrs(': 'void | bool', -\ 'ncurses_termname(': 'void | string', -\ 'ncurses_timeout(': 'int millisec | void', -\ 'ncurses_top_panel(': 'resource panel | int', -\ 'ncurses_typeahead(': 'int fd | int', -\ 'ncurses_ungetch(': 'int keycode | int', -\ 'ncurses_ungetmouse(': 'array mevent | bool', -\ 'ncurses_update_panels(': 'void | void', -\ 'ncurses_use_default_colors(': 'void | bool', -\ 'ncurses_use_env(': 'bool flag | void', -\ 'ncurses_use_extended_names(': 'bool flag | int', -\ 'ncurses_vidattr(': 'int intarg | int', -\ 'ncurses_vline(': 'int charattr, int n | int', -\ 'ncurses_waddch(': 'resource window, int ch | int', -\ 'ncurses_waddstr(': 'resource window, string str [, int n] | int', -\ 'ncurses_wattroff(': 'resource window, int attrs | int', -\ 'ncurses_wattron(': 'resource window, int attrs | int', -\ 'ncurses_wattrset(': 'resource window, int attrs | int', -\ 'ncurses_wborder(': 'resource window, int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner | int', -\ 'ncurses_wclear(': 'resource window | int', -\ 'ncurses_wcolor_set(': 'resource window, int color_pair | int', -\ 'ncurses_werase(': 'resource window | int', -\ 'ncurses_wgetch(': 'resource window | int', -\ 'ncurses_whline(': 'resource window, int charattr, int n | int', -\ 'ncurses_wmouse_trafo(': 'resource window, int &y, int &x, bool toscreen | bool', -\ 'ncurses_wmove(': 'resource window, int y, int x | int', -\ 'ncurses_wnoutrefresh(': 'resource window | int', -\ 'ncurses_wrefresh(': 'resource window | int', -\ 'ncurses_wstandend(': 'resource window | int', -\ 'ncurses_wstandout(': 'resource window | int', -\ 'ncurses_wvline(': 'resource window, int charattr, int n | int', -\ 'newt_bell(': 'void | void', -\ 'newt_button_bar(': 'array &buttons | resource', -\ 'newt_button(': 'int left, int top, string text | resource', -\ 'newt_centered_window(': 'int width, int height [, string title] | int', -\ 'newt_checkbox_get_value(': 'resource checkbox | string', -\ 'newt_checkbox(': 'int left, int top, string text, string def_value [, string seq] | resource', -\ 'newt_checkbox_set_flags(': 'resource checkbox, int flags, int sense | void', -\ 'newt_checkbox_set_value(': 'resource checkbox, string value | void', -\ 'newt_checkbox_tree_add_item(': 'resource checkboxtree, string text, mixed data, int flags, int index [, int ...] | void', -\ 'newt_checkbox_tree_find_item(': 'resource checkboxtree, mixed data | array', -\ 'newt_checkbox_tree_get_current(': 'resource checkboxtree | mixed', -\ 'newt_checkbox_tree_get_entry_value(': 'resource checkboxtree, mixed data | string', -\ 'newt_checkbox_tree_get_multi_selection(': 'resource checkboxtree, string seqnum | array', -\ 'newt_checkbox_tree_get_selection(': 'resource checkboxtree | array', -\ 'newt_checkbox_tree(': 'int left, int top, int height [, int flags] | resource', -\ 'newt_checkbox_tree_multi(': 'int left, int top, int height, string seq [, int flags] | resource', -\ 'newt_checkbox_tree_set_current(': 'resource checkboxtree, mixed data | void', -\ 'newt_checkbox_tree_set_entry(': 'resource checkboxtree, mixed data, string text | void', -\ 'newt_checkbox_tree_set_entry_value(': 'resource checkboxtree, mixed data, string value | void', -\ 'newt_checkbox_tree_set_width(': 'resource checkbox_tree, int width | void', -\ 'newt_clear_key_buffer(': 'void | void', -\ 'newt_cls(': 'void | void', -\ 'newt_compact_button(': 'int left, int top, string text | resource', -\ 'newt_component_add_callback(': 'resource component, mixed func_name, mixed data | void', -\ 'newt_component_takes_focus(': 'resource component, bool takes_focus | void', -\ 'newt_create_grid(': 'int cols, int rows | resource', -\ 'newt_cursor_off(': 'void | void', -\ 'newt_cursor_on(': 'void | void', -\ 'newt_delay(': 'int microseconds | void', -\ 'newt_draw_form(': 'resource form | void', -\ 'newt_draw_root_text(': 'int left, int top, string text | void', -\ 'newt_entry_get_value(': 'resource entry | string', -\ 'newt_entry(': 'int left, int top, int width [, string init_value [, int flags]] | resource', -\ 'newt_entry_set_filter(': 'resource entry, callback filter, mixed data | void', -\ 'newt_entry_set_flags(': 'resource entry, int flags, int sense | void', -\ 'newt_entry_set(': 'resource entry, string value [, bool cursor_at_end] | void', -\ 'newt_finished(': 'void | int', -\ 'newt_form_add_component(': 'resource form, resource component | void', -\ 'newt_form_add_components(': 'resource form, array components | void', -\ 'newt_form_add_host_key(': 'resource form, int key | void', -\ 'newt_form_destroy(': 'resource form | void', -\ 'newt_form_get_current(': 'resource form | resource', -\ 'newt_form(': '[resource vert_bar [, string help [, int flags]]] | resource', -\ 'newt_form_run(': 'resource form, array &exit_struct | void', -\ 'newt_form_set_background(': 'resource from, int background | void', -\ 'newt_form_set_height(': 'resource form, int height | void', -\ 'newt_form_set_size(': 'resource form | void', -\ 'newt_form_set_timer(': 'resource form, int milliseconds | void', -\ 'newt_form_set_width(': 'resource form, int width | void', -\ 'newt_form_watch_fd(': 'resource form, resource stream [, int flags] | void', -\ 'newt_get_screen_size(': 'int &cols, int &rows | void', -\ 'newt_grid_add_components_to_form(': 'resource grid, resource form, bool recurse | void', -\ 'newt_grid_basic_window(': 'resource text, resource middle, resource buttons | resource', -\ 'newt_grid_free(': 'resource grid, bool recurse | void', -\ 'newt_grid_get_size(': 'resouce grid, int &width, int &height | void', -\ 'newt_grid_h_close_stacked(': 'int element1_type, resource element1 [, int ... [, resource ...]] | resource', -\ 'newt_grid_h_stacked(': 'int element1_type, resource element1 [, int ... [, resource ...]] | resource', -\ 'newt_grid_place(': 'resource grid, int left, int top | void', -\ 'newt_grid_set_field(': 'resource grid, int col, int row, int type, resource val, int pad_left, int pad_top, int pad_right, int pad_bottom, int anchor [, int flags] | void', -\ 'newt_grid_simple_window(': 'resource text, resource middle, resource buttons | resource', -\ 'newt_grid_v_close_stacked(': 'int element1_type, resource element1 [, int ... [, resource ...]] | resource', -\ 'newt_grid_v_stacked(': 'int element1_type, resource element1 [, int ... [, resource ...]] | resource', -\ 'newt_grid_wrapped_window_at(': 'resource grid, string title, int left, int top | void', -\ 'newt_grid_wrapped_window(': 'resource grid, string title | void', -\ 'newt_init(': 'void | int', -\ 'newt_label(': 'int left, int top, string text | resource', -\ 'newt_label_set_text(': 'resource label, string text | void', -\ 'newt_listbox_append_entry(': 'resource listbox, string text, mixed data | void', -\ 'newt_listbox_clear(': 'resource listobx | void', -\ 'newt_listbox_clear_selection(': 'resource listbox | void', -\ 'newt_listbox_delete_entry(': 'resource listbox, mixed key | void', -\ 'newt_listbox_get_current(': 'resource listbox | string', -\ 'newt_listbox_get_selection(': 'resource listbox | array', -\ 'newt_listbox(': 'int left, int top, int height [, int flags] | resource', -\ 'newt_listbox_insert_entry(': 'resource listbox, string text, mixed data, mixed key | void', -\ 'newt_listbox_item_count(': 'resource listbox | int', -\ 'newt_listbox_select_item(': 'resource listbox, mixed key, int sense | void', -\ 'newt_listbox_set_current_by_key(': 'resource listbox, mixed key | void', -\ 'newt_listbox_set_current(': 'resource listbox, int num | void', -\ 'newt_listbox_set_data(': 'resource listbox, int num, mixed data | void', -\ 'newt_listbox_set_entry(': 'resource listbox, int num, string text | void', -\ 'newt_listbox_set_width(': 'resource listbox, int width | void', -\ 'newt_listitem_get_data(': 'resource item | mixed', -\ 'newt_listitem(': 'int left, int top, string text, bool is_default, resouce prev_item, mixed data [, int flags] | resource', -\ 'newt_listitem_set(': 'resource item, string text | void', -\ 'newt_open_window(': 'int left, int top, int width, int height [, string title] | int', -\ 'newt_pop_help_line(': 'void | void', -\ 'newt_pop_window(': 'void | void', -\ 'newt_push_help_line(': '[string text] | void', -\ 'newt_radiobutton(': 'int left, int top, string text, bool is_default [, resource prev_button] | resource', -\ 'newt_radio_get_current(': 'resource set_member | resource', -\ 'newt_redraw_help_line(': 'void | void', -\ 'newt_reflow_text(': 'string text, int width, int flex_down, int flex_up, int &actual_width, int &actual_height | string', -\ 'newt_refresh(': 'void | void', -\ 'newt_resize_screen(': '[bool redraw] | void', -\ 'newt_resume(': 'void | void', -\ 'newt_run_form(': 'resource form | resource', -\ 'newt_scale(': 'int left, int top, int width, int full_value | resource', -\ 'newt_scale_set(': 'resource scale, int amount | void', -\ 'newt_scrollbar_set(': 'resource scrollbar, int where, int total | void', -\ 'newt_set_help_callback(': 'mixed function | void', -\ 'newt_set_suspend_callback(': 'callback function, mixed data | void', -\ 'newt_suspend(': 'void | void', -\ 'newt_texbox_set_text(': 'resource textbox, string text | void', -\ 'newt_textbox_get_num_lines(': 'resource textbox | int', -\ 'newt_textbox(': 'int left, int top, int width, int height [, int flags] | resource', -\ 'newt_textbox_reflowed(': 'int left, int top, char *text, int width, int flex_down, int flex_up [, int flags] | resource', -\ 'newt_textbox_set_height(': 'resource textbox, int height | void', -\ 'newt_vertical_scrollbar(': 'int left, int top, int height [, int normal_colorset [, int thumb_colorset]] | resource', -\ 'newt_wait_for_key(': 'void | void', -\ 'newt_win_choice(': 'string title, string button1_text, string button2_text, string format [, mixed args [, mixed ...]] | int', -\ 'newt_win_entries(': 'string title, string text, int suggested_width, int flex_down, int flex_up, int data_width, array &items, string button1 [, string ...] | int', -\ 'newt_win_menu(': 'string title, string text, int suggestedWidth, int flexDown, int flexUp, int maxListHeight, array items, int &listItem [, string button1 [, string ...]] | int', -\ 'newt_win_message(': 'string title, string button_text, string format [, mixed args [, mixed ...]] | void', -\ 'newt_win_messagev(': 'string title, string button_text, string format, array args | void', -\ 'newt_win_ternary(': 'string title, string button1_text, string button2_text, string button3_text, string format [, mixed args [, mixed ...]] | int', -\ 'next(': 'array &array | mixed', -\ 'ngettext(': 'string msgid1, string msgid2, int n | string', -\ 'nl2br(': 'string string | string', -\ 'nl_langinfo(': 'int item | string', -\ 'notes_body(': 'string server, string mailbox, int msg_number | array', -\ 'notes_copy_db(': 'string from_database_name, string to_database_name | bool', -\ 'notes_create_db(': 'string database_name | bool', -\ 'notes_create_note(': 'string database_name, string form_name | bool', -\ 'notes_drop_db(': 'string database_name | bool', -\ 'notes_find_note(': 'string database_name, string name [, string type] | int', -\ 'notes_header_info(': 'string server, string mailbox, int msg_number | object', -\ 'notes_list_msgs(': 'string db | bool', -\ 'notes_mark_read(': 'string database_name, string user_name, string note_id | bool', -\ 'notes_mark_unread(': 'string database_name, string user_name, string note_id | bool', -\ 'notes_nav_create(': 'string database_name, string name | bool', -\ 'notes_search(': 'string database_name, string keywords | array', -\ 'notes_unread(': 'string database_name, string user_name | array', -\ 'notes_version(': 'string database_name | float', -\ 'nsapi_request_headers(': 'void | array', -\ 'nsapi_response_headers(': 'void | array', -\ 'nsapi_virtual(': 'string uri | bool', -\ 'number_format(': 'float number [, int decimals [, string dec_point, string thousands_sep]] | string', -\ 'ob_clean(': 'void | void', -\ 'ob_end_clean(': 'void | bool', -\ 'ob_end_flush(': 'void | bool', -\ 'ob_flush(': 'void | void', -\ 'ob_get_clean(': 'void | string', -\ 'ob_get_contents(': 'void | string', -\ 'ob_get_flush(': 'void | string', -\ 'ob_get_length(': 'void | int', -\ 'ob_get_level(': 'void | int', -\ 'ob_gzhandler(': 'string buffer, int mode | string', -\ 'ob_iconv_handler(': 'string contents, int status | string', -\ 'ob_implicit_flush(': '[int flag] | void', -\ 'ob_list_handlers(': 'void | array', -\ 'ob_start(': '[callback output_callback [, int chunk_size [, bool erase]]] | bool', -\ 'ob_tidyhandler(': 'string input [, int mode] | string', -\ 'oci_bind_by_name(': 'resource stmt, string ph_name, mixed &variable [, int maxlength [, int type]] | bool', -\ 'oci_cancel(': 'resource stmt | bool', -\ 'oci_close(': 'resource connection | bool', -\ 'oci_commit(': 'resource connection | bool', -\ 'oci_connect(': 'string username, string password [, string db [, string charset [, int session_mode]]] | resource', -\ 'oci_define_by_name(': 'resource statement, string column_name, mixed &variable [, int type] | bool', -\ 'oci_error(': '[resource source] | array', -\ 'oci_execute(': 'resource stmt [, int mode] | bool', -\ 'oci_fetch_all(': 'resource statement, array &output [, int skip [, int maxrows [, int flags]]] | int', -\ 'oci_fetch_array(': 'resource statement [, int mode] | array', -\ 'oci_fetch_assoc(': 'resource statement | array', -\ 'oci_fetch(': 'resource statement | bool', -\ 'ocifetchinto(': 'resource statement, array &result [, int mode] | int', -\ 'oci_fetch_object(': 'resource statement | object', -\ 'oci_fetch_row(': 'resource statement | array', -\ 'oci_field_is_null(': 'resource stmt, mixed field | bool', -\ 'oci_field_name(': 'resource statement, int field | string', -\ 'oci_field_precision(': 'resource statement, int field | int', -\ 'oci_field_scale(': 'resource statement, int field | int', -\ 'oci_field_size(': 'resource stmt, mixed field | int', -\ 'oci_field_type(': 'resource stmt, int field | mixed', -\ 'oci_field_type_raw(': 'resource statement, int field | int', -\ 'oci_free_statement(': 'resource statement | bool', -\ 'oci_internal_debug(': 'int onoff | void', -\ 'oci_lob_copy(': 'OCI-Lob lob_to, OCI-Lob lob_from [, int length] | bool', -\ 'oci_lob_is_equal(': 'OCI-Lob lob1, OCI-Lob lob2 | bool', -\ 'oci_new_collection(': 'resource connection, string tdo [, string schema] | OCI-Collection', -\ 'oci_new_connect(': 'string username, string password [, string db [, string charset [, int session_mode]]] | resource', -\ 'oci_new_cursor(': 'resource connection | resource', -\ 'oci_new_descriptor(': 'resource connection [, int type] | OCI-Lob', -\ 'oci_num_fields(': 'resource statement | int', -\ 'oci_num_rows(': 'resource stmt | int', -\ 'oci_parse(': 'resource connection, string query | resource', -\ 'oci_password_change(': 'resource connection, string username, string old_password, string new_password | bool', -\ 'oci_pconnect(': 'string username, string password [, string db [, string charset [, int session_mode]]] | resource', -\ 'oci_result(': 'resource statement, mixed field | mixed', -\ 'oci_rollback(': 'resource connection | bool', -\ 'oci_server_version(': 'resource connection | string', -\ 'oci_set_prefetch(': 'resource statement [, int rows] | bool', -\ 'oci_statement_type(': 'resource statement | string', -\ 'octdec(': 'string octal_string | number', -\ 'odbc_autocommit(': 'resource connection_id [, bool OnOff] | mixed', -\ 'odbc_binmode(': 'resource result_id, int mode | bool', -\ 'odbc_close_all(': 'void | void', -\ 'odbc_close(': 'resource connection_id | void', -\ 'odbc_columnprivileges(': 'resource connection_id, string qualifier, string owner, string table_name, string column_name | resource', -\ 'odbc_columns(': 'resource connection_id [, string qualifier [, string schema [, string table_name [, string column_name]]]] | resource', -\ 'odbc_commit(': 'resource connection_id | bool', -\ 'odbc_connect(': 'string dsn, string user, string password [, int cursor_type] | resource', -\ 'odbc_cursor(': 'resource result_id | string', -\ 'odbc_data_source(': 'resource connection_id, int fetch_type | array', -\ 'odbc_do(': 'resource conn_id, string query | resource', -\ 'odbc_error(': '[resource connection_id] | string', -\ 'odbc_errormsg(': '[resource connection_id] | string', -\ 'odbc_exec(': 'resource connection_id, string query_string [, int flags] | resource', -\ 'odbc_execute(': 'resource result_id [, array parameters_array] | bool', -\ 'odbc_fetch_array(': 'resource result [, int rownumber] | array', -\ 'odbc_fetch_into(': 'resource result_id, array &result_array [, int rownumber] | int', -\ 'odbc_fetch_object(': 'resource result [, int rownumber] | object', -\ 'odbc_fetch_row(': 'resource result_id [, int row_number] | bool', -\ 'odbc_field_len(': 'resource result_id, int field_number | int', -\ 'odbc_field_name(': 'resource result_id, int field_number | string', -\ 'odbc_field_num(': 'resource result_id, string field_name | int', -\ 'odbc_field_precision(': 'resource result_id, int field_number | int', -\ 'odbc_field_scale(': 'resource result_id, int field_number | int', -\ 'odbc_field_type(': 'resource result_id, int field_number | string', -\ 'odbc_foreignkeys(': 'resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table | resource', -\ 'odbc_free_result(': 'resource result_id | bool', -\ 'odbc_gettypeinfo(': 'resource connection_id [, int data_type] | resource', -\ 'odbc_longreadlen(': 'resource result_id, int length | bool', -\ 'odbc_next_result(': 'resource result_id | bool', -\ 'odbc_num_fields(': 'resource result_id | int', -\ 'odbc_num_rows(': 'resource result_id | int', -\ 'odbc_pconnect(': 'string dsn, string user, string password [, int cursor_type] | resource', -\ 'odbc_prepare(': 'resource connection_id, string query_string | resource', -\ 'odbc_primarykeys(': 'resource connection_id, string qualifier, string owner, string table | resource', -\ 'odbc_procedurecolumns(': 'resource connection_id [, string qualifier, string owner, string proc, string column] | resource', -\ 'odbc_procedures(': 'resource connection_id [, string qualifier, string owner, string name] | resource', -\ 'odbc_result_all(': 'resource result_id [, string format] | int', -\ 'odbc_result(': 'resource result_id, mixed field | mixed', -\ 'odbc_rollback(': 'resource connection_id | bool', -\ 'odbc_setoption(': 'resource id, int function, int option, int param | bool', -\ 'odbc_specialcolumns(': 'resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable | resource', -\ 'odbc_statistics(': 'resource connection_id, string qualifier, string owner, string table_name, int unique, int accuracy | resource', -\ 'odbc_tableprivileges(': 'resource connection_id, string qualifier, string owner, string name | resource', -\ 'odbc_tables(': 'resource connection_id [, string qualifier [, string owner [, string name [, string types]]]] | resource', -\ 'openal_buffer_create(': 'void | resource', -\ 'openal_buffer_data(': 'resource buffer, int format, string data, int freq | bool', -\ 'openal_buffer_destroy(': 'resource buffer | bool', -\ 'openal_buffer_get(': 'resource buffer, int property | int', -\ 'openal_buffer_loadwav(': 'resource buffer, string wavfile | bool', -\ 'openal_context_create(': 'resource device | resource', -\ 'openal_context_current(': 'resource context | bool', -\ 'openal_context_destroy(': 'resource context | bool', -\ 'openal_context_process(': 'resource context | bool', -\ 'openal_context_suspend(': 'resource context | bool', -\ 'openal_device_close(': 'resource device | bool', -\ 'openal_device_open(': '[string device_desc] | resource', -\ 'openal_listener_get(': 'int property | mixed', -\ 'openal_listener_set(': 'int property, mixed setting | bool', -\ 'openal_source_create(': 'void | resource', -\ 'openal_source_destroy(': 'resource source | bool', -\ 'openal_source_get(': 'resource source, int property | mixed', -\ 'openal_source_pause(': 'resource source | bool', -\ 'openal_source_play(': 'resource source | bool', -\ 'openal_source_rewind(': 'resource source | bool', -\ 'openal_source_set(': 'resource source, int property, mixed setting | bool', -\ 'openal_source_stop(': 'resource source | bool', -\ 'openal_stream(': 'resource source, int format, int rate | resource', -\ 'opendir(': 'string path [, resource context] | resource', -\ 'openlog(': 'string ident, int option, int facility | bool', -\ 'openssl_csr_export(': 'resource csr, string &out [, bool notext] | bool', -\ 'openssl_csr_export_to_file(': 'resource csr, string outfilename [, bool notext] | bool', -\ 'openssl_csr_new(': 'array dn, resource &privkey [, array configargs [, array extraattribs]] | mixed', -\ 'openssl_csr_sign(': 'mixed csr, mixed cacert, mixed priv_key, int days [, array configargs [, int serial]] | resource', -\ 'openssl_error_string(': 'void | string', -\ 'openssl_free_key(': 'resource key_identifier | void', -\ 'openssl_open(': 'string sealed_data, string &open_data, string env_key, mixed priv_key_id | bool', -\ 'openssl_pkcs7_decrypt(': 'string infilename, string outfilename, mixed recipcert [, mixed recipkey] | bool', -\ 'openssl_pkcs7_encrypt(': 'string infile, string outfile, mixed recipcerts, array headers [, int flags [, int cipherid]] | bool', -\ 'openssl_pkcs7_sign(': 'string infilename, string outfilename, mixed signcert, mixed privkey, array headers [, int flags [, string extracerts]] | bool', -\ 'openssl_pkcs7_verify(': 'string filename, int flags [, string outfilename [, array cainfo [, string extracerts]]] | mixed', -\ 'openssl_pkey_export(': 'mixed key, string &out [, string passphrase [, array configargs]] | bool', -\ 'openssl_pkey_export_to_file(': 'mixed key, string outfilename [, string passphrase [, array configargs]] | bool', -\ 'openssl_pkey_free(': 'resource key | void', -\ 'openssl_pkey_get_private(': 'mixed key [, string passphrase] | resource', -\ 'openssl_pkey_get_public(': 'mixed certificate | resource', -\ 'openssl_pkey_new(': '[array configargs] | resource', -\ 'openssl_private_decrypt(': 'string data, string &decrypted, mixed key [, int padding] | bool', -\ 'openssl_private_encrypt(': 'string data, string &crypted, mixed key [, int padding] | bool', -\ 'openssl_public_decrypt(': 'string data, string &decrypted, mixed key [, int padding] | bool', -\ 'openssl_public_encrypt(': 'string data, string &crypted, mixed key [, int padding] | bool', -\ 'openssl_seal(': 'string data, string &sealed_data, array &env_keys, array pub_key_ids | int', -\ 'openssl_sign(': 'string data, string &signature, mixed priv_key_id [, int signature_alg] | bool', -\ 'openssl_verify(': 'string data, string signature, mixed pub_key_id | int', -\ 'openssl_x509_check_private_key(': 'mixed cert, mixed key | bool', -\ 'openssl_x509_checkpurpose(': 'mixed x509cert, int purpose [, array cainfo [, string untrustedfile]] | int', -\ 'openssl_x509_export(': 'mixed x509, string &output [, bool notext] | bool', -\ 'openssl_x509_export_to_file(': 'mixed x509, string outfilename [, bool notext] | bool', -\ 'openssl_x509_free(': 'resource x509cert | void', -\ 'openssl_x509_parse(': 'mixed x509cert [, bool shortnames] | array', -\ 'openssl_x509_read(': 'mixed x509certdata | resource', -\ 'ora_bind(': 'resource cursor, string PHP_variable_name, string SQL_parameter_name, int length [, int type] | bool', -\ 'ora_close(': 'resource cursor | bool', -\ 'ora_columnname(': 'resource cursor, int column | string', -\ 'ora_columnsize(': 'resource cursor, int column | int', -\ 'ora_columntype(': 'resource cursor, int column | string', -\ 'ora_commit(': 'resource conn | bool', -\ 'ora_commitoff(': 'resource conn | bool', -\ 'ora_commiton(': 'resource conn | bool', -\ 'ora_do(': 'resource conn, string query | resource', -\ 'ora_errorcode(': '[resource cursor_or_connection] | int', -\ 'ora_error(': '[resource cursor_or_connection] | string', -\ 'ora_exec(': 'resource cursor | bool', -\ 'ora_fetch(': 'resource cursor | bool', -\ 'ora_fetch_into(': 'resource cursor, array &result [, int flags] | int', -\ 'ora_getcolumn(': 'resource cursor, int column | string', -\ 'ora_logoff(': 'resource connection | bool', -\ 'ora_logon(': 'string user, string password | resource', -\ 'ora_numcols(': 'resource cursor | int', -\ 'ora_numrows(': 'resource cursor | int', -\ 'ora_open(': 'resource connection | resource', -\ 'ora_parse(': 'resource cursor, string sql_statement [, int defer] | bool', -\ 'ora_plogon(': 'string user, string password | resource', -\ 'ora_rollback(': 'resource connection | bool', -\ 'OrbitEnum(': 'string id | new', -\ 'OrbitObject(': 'string ior | new', -\ 'OrbitStruct(': 'string id | new', -\ 'ord(': 'string string | int', -\ 'output_add_rewrite_var(': 'string name, string value | bool', -\ 'output_reset_rewrite_vars(': 'void | bool', -\ 'overload(': '[string class_name] | void', -\ 'override_function(': 'string function_name, string function_args, string function_code | bool', -\ 'ovrimos_close(': 'int connection | void', -\ 'ovrimos_commit(': 'int connection_id | bool', -\ 'ovrimos_connect(': 'string host, string db, string user, string password | int', -\ 'ovrimos_cursor(': 'int result_id | string', -\ 'ovrimos_exec(': 'int connection_id, string query | int', -\ 'ovrimos_execute(': 'int result_id [, array parameters_array] | bool', -\ 'ovrimos_fetch_into(': 'int result_id, array &result_array [, string how [, int rownumber]] | bool', -\ 'ovrimos_fetch_row(': 'int result_id [, int how [, int row_number]] | bool', -\ 'ovrimos_field_len(': 'int result_id, int field_number | int', -\ 'ovrimos_field_name(': 'int result_id, int field_number | string', -\ 'ovrimos_field_num(': 'int result_id, string field_name | int', -\ 'ovrimos_field_type(': 'int result_id, int field_number | int', -\ 'ovrimos_free_result(': 'int result_id | bool', -\ 'ovrimos_longreadlen(': 'int result_id, int length | bool', -\ 'ovrimos_num_fields(': 'int result_id | int', -\ 'ovrimos_num_rows(': 'int result_id | int', -\ 'ovrimos_prepare(': 'int connection_id, string query | int', -\ 'ovrimos_result_all(': 'int result_id [, string format] | int', -\ 'ovrimos_result(': 'int result_id, mixed field | string', -\ 'ovrimos_rollback(': 'int connection_id | bool', -\ 'pack(': 'string format [, mixed args [, mixed ...]] | string', -\ 'parse_ini_file(': 'string filename [, bool process_sections] | array', -\ 'parsekit_compile_file(': 'string filename [, array &errors [, int options]] | array', -\ 'parsekit_compile_string(': 'string phpcode [, array &errors [, int options]] | array', -\ 'parsekit_func_arginfo(': 'mixed function | array', -\ 'parse_str(': 'string str [, array &arr] | void', -\ 'parse_url(': 'string url | array', -\ 'passthru(': 'string command [, int &return_var] | void', -\ 'pathinfo(': 'string path [, int options] | mixed', -\ 'pclose(': 'resource handle | int', -\ 'pcntl_alarm(': 'int seconds | int', -\ 'pcntl_exec(': 'string path [, array args [, array envs]] | void', -\ 'pcntl_fork(': 'void | int', -\ 'pcntl_getpriority(': '[int pid [, int process_identifier]] | int', -\ 'pcntl_setpriority(': 'int priority [, int pid [, int process_identifier]] | bool', -\ 'pcntl_signal(': 'int signo, callback handle [, bool restart_syscalls] | bool', -\ 'pcntl_wait(': 'int &status [, int options] | int', -\ 'pcntl_waitpid(': 'int pid, int &status [, int options] | int', -\ 'pcntl_wexitstatus(': 'int status | int', -\ 'pcntl_wifexited(': 'int status | bool', -\ 'pcntl_wifsignaled(': 'int status | bool', -\ 'pcntl_wifstopped(': 'int status | bool', -\ 'pcntl_wstopsig(': 'int status | int', -\ 'pcntl_wtermsig(': 'int status | int', -\ 'pdf_activate_item(': 'resource pdfdoc, int id | bool', -\ 'pdf_add_launchlink(': 'resource pdfdoc, float llx, float lly, float urx, float ury, string filename | bool', -\ 'pdf_add_locallink(': 'resource pdfdoc, float lowerleftx, float lowerlefty, float upperrightx, float upperrighty, int page, string dest | bool', -\ 'pdf_add_nameddest(': 'resource pdfdoc, string name, string optlist | bool', -\ 'pdf_add_note(': 'resource pdfdoc, float llx, float lly, float urx, float ury, string contents, string title, string icon, int open | bool', -\ 'pdf_add_pdflink(': 'resource pdfdoc, float bottom_left_x, float bottom_left_y, float up_right_x, float up_right_y, string filename, int page, string dest | bool', -\ 'pdf_add_thumbnail(': 'resource pdfdoc, int image | bool', -\ 'pdf_add_weblink(': 'resource pdfdoc, float lowerleftx, float lowerlefty, float upperrightx, float upperrighty, string url | bool', -\ 'pdf_arc(': 'resource p, float x, float y, float r, float alpha, float beta | bool', -\ 'pdf_arcn(': 'resource p, float x, float y, float r, float alpha, float beta | bool', -\ 'pdf_attach_file(': 'resource pdfdoc, float llx, float lly, float urx, float ury, string filename, string description, string author, string mimetype, string icon | bool', -\ 'pdf_begin_document(': 'resource pdfdoc, string filename, string optlist | int', -\ 'pdf_begin_font(': 'resource pdfdoc, string filename, float a, float b, float c, float d, float e, float f, string optlist | bool', -\ 'pdf_begin_glyph(': 'resource pdfdoc, string glyphname, float wx, float llx, float lly, float urx, float ury | bool', -\ 'pdf_begin_item(': 'resource pdfdoc, string tag, string optlist | int', -\ 'pdf_begin_layer(': 'resource pdfdoc, int layer | bool', -\ 'pdf_begin_page_ext(': 'resource pdfdoc, float width, float height, string optlist | bool', -\ 'pdf_begin_page(': 'resource pdfdoc, float width, float height | bool', -\ 'pdf_begin_pattern(': 'resource pdfdoc, float width, float height, float xstep, float ystep, int painttype | int', -\ 'pdf_begin_template(': 'resource pdfdoc, float width, float height | int', -\ 'pdf_circle(': 'resource pdfdoc, float x, float y, float r | bool', -\ 'pdf_clip(': 'resource p | bool', -\ 'pdf_close(': 'resource p | bool', -\ 'pdf_close_image(': 'resource p, int image | void', -\ 'pdf_closepath_fill_stroke(': 'resource p | bool', -\ 'pdf_closepath(': 'resource p | bool', -\ 'pdf_closepath_stroke(': 'resource p | bool', -\ 'pdf_close_pdi(': 'resource p, int doc | bool', -\ 'pdf_close_pdi_page(': 'resource p, int page | bool', -\ 'pdf_concat(': 'resource p, float a, float b, float c, float d, float e, float f | bool', -\ 'pdf_continue_text(': 'resource p, string text | bool', -\ 'pdf_create_action(': 'resource pdfdoc, string type, string optlist | int', -\ 'pdf_create_annotation(': 'resource pdfdoc, float llx, float lly, float urx, float ury, string type, string optlist | bool', -\ 'pdf_create_bookmark(': 'resource pdfdoc, string text, string optlist | int', -\ 'pdf_create_fieldgroup(': 'resource pdfdoc, string name, string optlist | bool', -\ 'pdf_create_field(': 'resource pdfdoc, float llx, float lly, float urx, float ury, string name, string type, string optlist | bool', -\ 'pdf_create_gstate(': 'resource pdfdoc, string optlist | int', -\ 'pdf_create_pvf(': 'resource pdfdoc, string filename, string data, string optlist | bool', -\ 'pdf_create_textflow(': 'resource pdfdoc, string text, string optlist | int', -\ 'pdf_curveto(': 'resource p, float x1, float y1, float x2, float y2, float x3, float y3 | bool', -\ 'pdf_define_layer(': 'resource pdfdoc, string name, string optlist | int', -\ 'pdf_delete(': 'resource pdfdoc | bool', -\ 'pdf_delete_pvf(': 'resource pdfdoc, string filename | int', -\ 'pdf_delete_textflow(': 'resource pdfdoc, int textflow | bool', -\ 'pdf_encoding_set_char(': 'resource pdfdoc, string encoding, int slot, string glyphname, int uv | bool', -\ 'pdf_end_document(': 'resource pdfdoc, string optlist | bool', -\ 'pdf_end_font(': 'resource pdfdoc | bool', -\ 'pdf_end_glyph(': 'resource pdfdoc | bool', -\ 'pdf_end_item(': 'resource pdfdoc, int id | bool', -\ 'pdf_end_layer(': 'resource pdfdoc | bool', -\ 'pdf_end_page_ext(': 'resource pdfdoc, string optlist | bool', -\ 'pdf_end_page(': 'resource p | bool', -\ 'pdf_end_pattern(': 'resource p | bool', -\ 'pdf_end_template(': 'resource p | bool', -\ 'pdf_fill(': 'resource p | bool', -\ 'pdf_fill_imageblock(': 'resource pdfdoc, int page, string blockname, int image, string optlist | int', -\ 'pdf_fill_pdfblock(': 'resource pdfdoc, int page, string blockname, int contents, string optlist | int', -\ 'pdf_fill_stroke(': 'resource p | bool', -\ 'pdf_fill_textblock(': 'resource pdfdoc, int page, string blockname, string text, string optlist | int', -\ 'pdf_findfont(': 'resource p, string fontname, string encoding, int embed | int', -\ 'pdf_fit_image(': 'resource pdfdoc, int image, float x, float y, string optlist | bool', -\ 'pdf_fit_pdi_page(': 'resource pdfdoc, int page, float x, float y, string optlist | bool', -\ 'pdf_fit_textflow(': 'resource pdfdoc, int textflow, float llx, float lly, float urx, float ury, string optlist | string', -\ 'pdf_fit_textline(': 'resource pdfdoc, string text, float x, float y, string optlist | bool', -\ 'pdf_get_apiname(': 'resource pdfdoc | string', -\ 'pdf_get_buffer(': 'resource p | string', -\ 'pdf_get_errmsg(': 'resource pdfdoc | string', -\ 'pdf_get_errnum(': 'resource pdfdoc | int', -\ 'pdf_get_majorversion(': 'void | int', -\ 'pdf_get_minorversion(': 'void | int', -\ 'pdf_get_parameter(': 'resource p, string key, float modifier | string', -\ 'pdf_get_pdi_parameter(': 'resource p, string key, int doc, int page, int reserved | string', -\ 'pdf_get_pdi_value(': 'resource p, string key, int doc, int page, int reserved | float', -\ 'pdf_get_value(': 'resource p, string key, float modifier | float', -\ 'pdf_info_textflow(': 'resource pdfdoc, int textflow, string keyword | float', -\ 'pdf_initgraphics(': 'resource p | bool', -\ 'pdf_lineto(': 'resource p, float x, float y | bool', -\ 'pdf_load_font(': 'resource pdfdoc, string fontname, string encoding, string optlist | int', -\ 'pdf_load_iccprofile(': 'resource pdfdoc, string profilename, string optlist | int', -\ 'pdf_load_image(': 'resource pdfdoc, string imagetype, string filename, string optlist | int', -\ 'pdf_makespotcolor(': 'resource p, string spotname | int', -\ 'pdf_moveto(': 'resource p, float x, float y | bool', -\ 'pdf_new(': ' | resource', -\ 'pdf_open_ccitt(': 'resource pdfdoc, string filename, int width, int height, int BitReverse, int k, int Blackls1 | int', -\ 'pdf_open_file(': 'resource p, string filename | bool', -\ 'pdf_open_image_file(': 'resource p, string imagetype, string filename, string stringparam, int intparam | int', -\ 'pdf_open_image(': 'resource p, string imagetype, string source, string data, int length, int width, int height, int components, int bpc, string params | int', -\ 'pdf_open_memory_image(': 'resource p, resource image | int', -\ 'pdf_open_pdi(': 'resource pdfdoc, string filename, string optlist, int len | int', -\ 'pdf_open_pdi_page(': 'resource p, int doc, int pagenumber, string optlist | int', -\ 'pdf_place_image(': 'resource pdfdoc, int image, float x, float y, float scale | bool', -\ 'pdf_place_pdi_page(': 'resource pdfdoc, int page, float x, float y, float sx, float sy | bool', -\ 'pdf_process_pdi(': 'resource pdfdoc, int doc, int page, string optlist | int', -\ 'pdf_rect(': 'resource p, float x, float y, float width, float height | bool', -\ 'pdf_restore(': 'resource p | bool', -\ 'pdf_resume_page(': 'resource pdfdoc, string optlist | bool', -\ 'pdf_rotate(': 'resource p, float phi | bool', -\ 'pdf_save(': 'resource p | bool', -\ 'pdf_scale(': 'resource p, float sx, float sy | bool', -\ 'pdf_set_border_color(': 'resource p, float red, float green, float blue | bool', -\ 'pdf_set_border_dash(': 'resource pdfdoc, float black, float white | bool', -\ 'pdf_set_border_style(': 'resource pdfdoc, string style, float width | bool', -\ 'pdf_setcolor(': 'resource p, string fstype, string colorspace, float c1, float c2, float c3, float c4 | bool', -\ 'pdf_setdash(': 'resource pdfdoc, float b, float w | bool', -\ 'pdf_setdashpattern(': 'resource pdfdoc, string optlist | bool', -\ 'pdf_setflat(': 'resource pdfdoc, float flatness | bool', -\ 'pdf_setfont(': 'resource pdfdoc, int font, float fontsize | bool', -\ 'pdf_setgray_fill(': 'resource p, float g | bool', -\ 'pdf_setgray(': 'resource p, float g | bool', -\ 'pdf_setgray_stroke(': 'resource p, float g | bool', -\ 'pdf_set_gstate(': 'resource pdfdoc, int gstate | bool', -\ 'pdf_set_info(': 'resource p, string key, string value | bool', -\ 'pdf_set_layer_dependency(': 'resource pdfdoc, string type, string optlist | bool', -\ 'pdf_setlinecap(': 'resource p, int linecap | bool', -\ 'pdf_setlinejoin(': 'resource p, int value | bool', -\ 'pdf_setlinewidth(': 'resource p, float width | bool', -\ 'pdf_setmatrix(': 'resource p, float a, float b, float c, float d, float e, float f | bool', -\ 'pdf_setmiterlimit(': 'resource pdfdoc, float miter | bool', -\ 'pdf_set_parameter(': 'resource p, string key, string value | bool', -\ 'pdf_setrgbcolor_fill(': 'resource p, float red, float green, float blue | bool', -\ 'pdf_setrgbcolor(': 'resource p, float red, float green, float blue | bool', -\ 'pdf_setrgbcolor_stroke(': 'resource p, float red, float green, float blue | bool', -\ 'pdf_set_text_pos(': 'resource p, float x, float y | bool', -\ 'pdf_set_value(': 'resource p, string key, float value | bool', -\ 'pdf_shading(': 'resource pdfdoc, string shtype, float x0, float y0, float x1, float y1, float c1, float c2, float c3, float c4, string optlist | int', -\ 'pdf_shading_pattern(': 'resource pdfdoc, int shading, string optlist | int', -\ 'pdf_shfill(': 'resource pdfdoc, int shading | bool', -\ 'pdf_show_boxed(': 'resource p, string text, float left, float top, float width, float height, string mode, string feature | int', -\ 'pdf_show(': 'resource pdfdoc, string text | bool', -\ 'pdf_show_xy(': 'resource p, string text, float x, float y | bool', -\ 'pdf_skew(': 'resource p, float alpha, float beta | bool', -\ 'pdf_stringwidth(': 'resource p, string text, int font, float fontsize | float', -\ 'pdf_stroke(': 'resource p | bool', -\ 'pdf_suspend_page(': 'resource pdfdoc, string optlist | bool', -\ 'pdf_translate(': 'resource p, float tx, float ty | bool', -\ 'pdf_utf16_to_utf8(': 'resource pdfdoc, string utf16string | string', -\ 'pdf_utf8_to_utf16(': 'resource pdfdoc, string utf8string, string ordering | string', -\ 'pdf_xshow(': 'resource pdfdoc, string text | bool', -\ 'pfpro_cleanup(': 'void | bool', -\ 'pfpro_init(': 'void | bool', -\ 'pfpro_process(': 'array parameters [, string address [, int port [, int timeout [, string proxy_address [, int proxy_port [, string proxy_logon [, string proxy_password]]]]]]] | array', -\ 'pfpro_process_raw(': 'string parameters [, string address [, int port [, int timeout [, string proxy_address [, int proxy_port [, string proxy_logon [, string proxy_password]]]]]]] | string', -\ 'pfpro_version(': 'void | string', -\ 'pfsockopen(': 'string hostname [, int port [, int &errno [, string &errstr [, float timeout]]]] | resource', -\ 'pg_affected_rows(': 'resource result | int', -\ 'pg_cancel_query(': 'resource connection | bool', -\ 'pg_client_encoding(': '[resource connection] | string', -\ 'pg_close(': '[resource connection] | bool', -\ 'pg_connect(': 'string connection_string [, int connect_type] | resource', -\ 'pg_connection_busy(': 'resource connection | bool', -\ 'pg_connection_reset(': 'resource connection | bool', -\ 'pg_connection_status(': 'resource connection | int', -\ 'pg_convert(': 'resource connection, string table_name, array assoc_array [, int options] | array', -\ 'pg_copy_from(': 'resource connection, string table_name, array rows [, string delimiter [, string null_as]] | bool', -\ 'pg_copy_to(': 'resource connection, string table_name [, string delimiter [, string null_as]] | array', -\ 'pg_dbname(': '[resource connection] | string', -\ 'pg_delete(': 'resource connection, string table_name, array assoc_array [, int options] | mixed', -\ 'pg_end_copy(': '[resource connection] | bool', -\ 'pg_escape_bytea(': 'string data | string', -\ 'pg_escape_string(': 'string data | string', -\ 'pg_execute(': 'resource connection, string stmtname, array params | resource', -\ 'pg_fetch_all_columns(': 'resource result [, int column] | array', -\ 'pg_fetch_all(': 'resource result | array', -\ 'pg_fetch_array(': 'resource result [, int row [, int result_type]] | array', -\ 'pg_fetch_assoc(': 'resource result [, int row] | array', -\ 'pg_fetch_object(': 'resource result [, int row [, int result_type]] | object', -\ 'pg_fetch_result(': 'resource result, int row, mixed field | string', -\ 'pg_fetch_row(': 'resource result [, int row] | array', -\ 'pg_field_is_null(': 'resource result, int row, mixed field | int', -\ 'pg_field_name(': 'resource result, int field_number | string', -\ 'pg_field_num(': 'resource result, string field_name | int', -\ 'pg_field_prtlen(': 'resource result, int row_number, mixed field_name_or_number | int', -\ 'pg_field_size(': 'resource result, int field_number | int', -\ 'pg_field_type(': 'resource result, int field_number | string', -\ 'pg_field_type_oid(': 'resource result, int field_number | int', -\ 'pg_free_result(': 'resource result | bool', -\ 'pg_get_notify(': 'resource connection [, int result_type] | array', -\ 'pg_get_pid(': 'resource connection | int', -\ 'pg_get_result(': '[resource connection] | resource', -\ 'pg_host(': '[resource connection] | string', -\ 'pg_insert(': 'resource connection, string table_name, array assoc_array [, int options] | mixed', -\ 'pg_last_error(': '[resource connection] | string', -\ 'pg_last_notice(': 'resource connection | string', -\ 'pg_last_oid(': 'resource result | string', -\ 'pg_lo_close(': 'resource large_object | bool', -\ 'pg_lo_create(': '[resource connection] | int', -\ 'pg_lo_export(': 'resource connection, int oid, string pathname | bool', -\ 'pg_lo_import(': 'resource connection, string pathname | int', -\ 'pg_lo_open(': 'resource connection, int oid, string mode | resource', -\ 'pg_lo_read_all(': 'resource large_object | int', -\ 'pg_lo_read(': 'resource large_object [, int len] | string', -\ 'pg_lo_seek(': 'resource large_object, int offset [, int whence] | bool', -\ 'pg_lo_tell(': 'resource large_object | int', -\ 'pg_lo_unlink(': 'resource connection, int oid | bool', -\ 'pg_lo_write(': 'resource large_object, string data [, int len] | int', -\ 'pg_meta_data(': 'resource connection, string table_name | array', -\ 'pg_num_fields(': 'resource result | int', -\ 'pg_num_rows(': 'resource result | int', -\ 'pg_options(': '[resource connection] | string', -\ 'pg_parameter_status(': 'resource connection, string param_name | string', -\ 'pg_pconnect(': 'string connection_string [, int connect_type] | resource', -\ 'pg_ping(': '[resource connection] | bool', -\ 'pg_port(': '[resource connection] | int', -\ 'pg_prepare(': 'resource connection, string stmtname, string query | resource', -\ 'pg_put_line(': 'string data | bool', -\ 'pg_query(': 'string query | resource', -\ 'pg_query_params(': 'resource connection, string query, array params | resource', -\ 'pg_result_error_field(': 'resource result, int fieldcode | string', -\ 'pg_result_error(': 'resource result | string', -\ 'pg_result_seek(': 'resource result, int offset | bool', -\ 'pg_result_status(': 'resource result [, int type] | mixed', -\ 'pg_select(': 'resource connection, string table_name, array assoc_array [, int options] | mixed', -\ 'pg_send_execute(': 'resource connection, string stmtname, array params | bool', -\ 'pg_send_prepare(': 'resource connection, string stmtname, string query | bool', -\ 'pg_send_query(': 'resource connection, string query | bool', -\ 'pg_send_query_params(': 'resource connection, string query, array params | bool', -\ 'pg_set_client_encoding(': 'string encoding | int', -\ 'pg_set_error_verbosity(': 'resource connection, int verbosity | int', -\ 'pg_trace(': 'string pathname [, string mode [, resource connection]] | bool', -\ 'pg_transaction_status(': 'resource connection | int', -\ 'pg_tty(': '[resource connection] | string', -\ 'pg_unescape_bytea(': 'string data | string', -\ 'pg_untrace(': '[resource connection] | bool', -\ 'pg_update(': 'resource connection, string table_name, array data, array condition [, int options] | mixed', -\ 'pg_version(': '[resource connection] | array', -\ 'php_check_syntax(': 'string file_name [, string &error_message] | bool', -\ 'phpcredits(': '[int flag] | bool', -\ 'phpinfo(': '[int what] | bool', -\ 'php_ini_scanned_files(': 'void | string', -\ 'php_logo_guid(': 'void | string', -\ 'php_sapi_name(': 'void | string', -\ 'php_strip_whitespace(': 'string filename | string', -\ 'php_uname(': '[string mode] | string', -\ 'phpversion(': '[string extension] | string', -\ 'pi(': 'void | float', -\ 'png2wbmp(': 'string pngname, string wbmpname, int d_height, int d_width, int threshold | int', -\ 'popen(': 'string command, string mode | resource', -\ 'posix_access(': 'string file [, int mode] | bool', -\ 'posix_ctermid(': 'void | string', -\ 'posix_getcwd(': 'void | string', -\ 'posix_getegid(': 'void | int', -\ 'posix_geteuid(': 'void | int', -\ 'posix_getgid(': 'void | int', -\ 'posix_getgrgid(': 'int gid | array', -\ 'posix_getgrnam(': 'string name | array', -\ 'posix_getgroups(': 'void | array', -\ 'posix_get_last_error(': 'void | int', -\ 'posix_getlogin(': 'void | string', -\ 'posix_getpgid(': 'int pid | int', -\ 'posix_getpgrp(': 'void | int', -\ 'posix_getpid(': 'void | int', -\ 'posix_getppid(': 'void | int', -\ 'posix_getpwnam(': 'string username | array', -\ 'posix_getpwuid(': 'int uid | array', -\ 'posix_getrlimit(': 'void | array', -\ 'posix_getsid(': 'int pid | int', -\ 'posix_getuid(': 'void | int', -\ 'posix_isatty(': 'int fd | bool', -\ 'posix_kill(': 'int pid, int sig | bool', -\ 'posix_mkfifo(': 'string pathname, int mode | bool', -\ 'posix_mknod(': 'string pathname, int mode [, int major [, int minor]] | bool', -\ 'posix_setegid(': 'int gid | bool', -\ 'posix_seteuid(': 'int uid | bool', -\ 'posix_setgid(': 'int gid | bool', -\ 'posix_setpgid(': 'int pid, int pgid | bool', -\ 'posix_setsid(': 'void | int', -\ 'posix_setuid(': 'int uid | bool', -\ 'posix_strerror(': 'int errno | string', -\ 'posix_times(': 'void | array', -\ 'posix_ttyname(': 'int fd | string', -\ 'posix_uname(': 'void | array', -\ 'pow(': 'number base, number exp | number', -\ 'preg_grep(': 'string pattern, array input [, int flags] | array', -\ 'preg_match_all(': 'string pattern, string subject, array &matches [, int flags [, int offset]] | int', -\ 'preg_match(': 'string pattern, string subject [, array &matches [, int flags [, int offset]]] | int', -\ 'preg_quote(': 'string str [, string delimiter] | string', -\ 'preg_replace_callback(': 'mixed pattern, callback callback, mixed subject [, int limit [, int &count]] | mixed', -\ 'preg_replace(': 'mixed pattern, mixed replacement, mixed subject [, int limit [, int &count]] | mixed', -\ 'preg_split(': 'string pattern, string subject [, int limit [, int flags]] | array', -\ 'prev(': 'array &array | mixed', -\ 'printer_abort(': 'resource handle | void', -\ 'printer_close(': 'resource handle | void', -\ 'printer_create_brush(': 'int style, string color | resource', -\ 'printer_create_dc(': 'resource handle | void', -\ 'printer_create_font(': 'string face, int height, int width, int font_weight, bool italic, bool underline, bool strikeout, int orientation | resource', -\ 'printer_create_pen(': 'int style, int width, string color | resource', -\ 'printer_delete_brush(': 'resource handle | void', -\ 'printer_delete_dc(': 'resource handle | bool', -\ 'printer_delete_font(': 'resource handle | void', -\ 'printer_delete_pen(': 'resource handle | void', -\ 'printer_draw_bmp(': 'resource handle, string filename, int x, int y [, int width, int height] | bool', -\ 'printer_draw_chord(': 'resource handle, int rec_x, int rec_y, int rec_x1, int rec_y1, int rad_x, int rad_y, int rad_x1, int rad_y1 | void', -\ 'printer_draw_elipse(': 'resource handle, int ul_x, int ul_y, int lr_x, int lr_y | void', -\ 'printer_draw_line(': 'resource printer_handle, int from_x, int from_y, int to_x, int to_y | void', -\ 'printer_draw_pie(': 'resource handle, int rec_x, int rec_y, int rec_x1, int rec_y1, int rad1_x, int rad1_y, int rad2_x, int rad2_y | void', -\ 'printer_draw_rectangle(': 'resource handle, int ul_x, int ul_y, int lr_x, int lr_y | void', -\ 'printer_draw_roundrect(': 'resource handle, int ul_x, int ul_y, int lr_x, int lr_y, int width, int height | void', -\ 'printer_draw_text(': 'resource printer_handle, string text, int x, int y | void', -\ 'printer_end_doc(': 'resource handle | bool', -\ 'printer_end_page(': 'resource handle | bool', -\ 'printer_get_option(': 'resource handle, string option | mixed', -\ 'printer_list(': 'int enumtype [, string name [, int level]] | array', -\ 'printer_logical_fontheight(': 'resource handle, int height | int', -\ 'printer_open(': '[string devicename] | resource', -\ 'printer_select_brush(': 'resource printer_handle, resource brush_handle | void', -\ 'printer_select_font(': 'resource printer_handle, resource font_handle | void', -\ 'printer_select_pen(': 'resource printer_handle, resource pen_handle | void', -\ 'printer_set_option(': 'resource handle, int option, mixed value | bool', -\ 'printer_start_doc(': 'resource handle [, string document] | bool', -\ 'printer_start_page(': 'resource handle | bool', -\ 'printer_write(': 'resource handle, string content | bool', -\ 'printf(': 'string format [, mixed args [, mixed ...]] | int', -\ 'print(': 'string arg | int', -\ 'print_r(': 'mixed expression [, bool return] | bool', -\ 'proc_close(': 'resource process | int', -\ 'proc_get_status(': 'resource process | array', -\ 'proc_nice(': 'int increment | bool', -\ 'proc_open(': 'string cmd, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]] | resource', -\ 'proc_terminate(': 'resource process [, int signal] | int', -\ 'property_exists(': 'mixed class, string property | bool', -\ 'ps_add_bookmark(': 'resource psdoc, string text [, int parent [, int open]] | int', -\ 'ps_add_launchlink(': 'resource psdoc, float llx, float lly, float urx, float ury, string filename | bool', -\ 'ps_add_locallink(': 'resource psdoc, float llx, float lly, float urx, float ury, int page, string dest | bool', -\ 'ps_add_note(': 'resource psdoc, float llx, float lly, float urx, float ury, string contents, string title, string icon, int open | bool', -\ 'ps_add_pdflink(': 'resource psdoc, float llx, float lly, float urx, float ury, string filename, int page, string dest | bool', -\ 'ps_add_weblink(': 'resource psdoc, float llx, float lly, float urx, float ury, string url | bool', -\ 'ps_arc(': 'resource psdoc, float x, float y, float radius, float alpha, float beta | bool', -\ 'ps_arcn(': 'resource psdoc, float x, float y, float radius, float alpha, float beta | bool', -\ 'ps_begin_page(': 'resource psdoc, float width, float height | bool', -\ 'ps_begin_pattern(': 'resource psdoc, float width, float height, float xstep, float ystep, int painttype | bool', -\ 'ps_begin_template(': 'resource psdoc, float width, float height | bool', -\ 'ps_circle(': 'resource psdoc, float x, float y, float radius | bool', -\ 'ps_clip(': 'resource psdoc | bool', -\ 'ps_close(': 'resource psdoc | bool', -\ 'ps_close_image(': 'resource psdoc, int imageid | void', -\ 'ps_closepath(': 'resource psdoc | bool', -\ 'ps_closepath_stroke(': 'resource psdoc | bool', -\ 'ps_continue_text(': 'resource psdoc, string text | bool', -\ 'ps_curveto(': 'resource psdoc, float x1, float y1, float x2, float y2, float x3, float y3 | bool', -\ 'ps_delete(': 'resource psdoc | bool', -\ 'ps_end_page(': 'resource psdoc | bool', -\ 'ps_end_pattern(': 'resource psdoc | bool', -\ 'ps_end_template(': 'resource psdoc | bool', -\ 'ps_fill(': 'resource psdoc | bool', -\ 'ps_fill_stroke(': 'resource psdoc | bool', -\ 'ps_findfont(': 'resource psdoc, string fontname, string encoding [, bool embed] | int', -\ 'ps_get_buffer(': 'resource psdoc | string', -\ 'ps_get_parameter(': 'resource psdoc, string name [, float modifier] | string', -\ 'ps_get_value(': 'resource psdoc, string name [, float modifier] | float', -\ 'ps_hyphenate(': 'resource psdoc, string text | array', -\ 'ps_lineto(': 'resource psdoc, float x, float y | bool', -\ 'ps_makespotcolor(': 'resource psdoc, string name [, float reserved] | int', -\ 'ps_moveto(': 'resource psdoc, float x, float y | bool', -\ 'ps_new(': 'void | resource', -\ 'ps_open_file(': 'resource psdoc [, string filename] | bool', -\ 'ps_open_image_file(': 'resource psdoc, string type, string filename [, string stringparam [, int intparam]] | int', -\ 'ps_open_image(': 'resource psdoc, string type, string source, string data, int lenght, int width, int height, int components, int bpc, string params | int', -\ 'pspell_add_to_personal(': 'int dictionary_link, string word | bool', -\ 'pspell_add_to_session(': 'int dictionary_link, string word | bool', -\ 'pspell_check(': 'int dictionary_link, string word | bool', -\ 'pspell_clear_session(': 'int dictionary_link | bool', -\ 'pspell_config_create(': 'string language [, string spelling [, string jargon [, string encoding]]] | int', -\ 'pspell_config_data_dir(': 'int conf, string directory | bool', -\ 'pspell_config_dict_dir(': 'int conf, string directory | bool', -\ 'pspell_config_ignore(': 'int dictionary_link, int n | bool', -\ 'pspell_config_mode(': 'int dictionary_link, int mode | bool', -\ 'pspell_config_personal(': 'int dictionary_link, string file | bool', -\ 'pspell_config_repl(': 'int dictionary_link, string file | bool', -\ 'pspell_config_runtogether(': 'int dictionary_link, bool flag | bool', -\ 'pspell_config_save_repl(': 'int dictionary_link, bool flag | bool', -\ 'pspell_new_config(': 'int config | int', -\ 'pspell_new(': 'string language [, string spelling [, string jargon [, string encoding [, int mode]]]] | int', -\ 'pspell_new_personal(': 'string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]] | int', -\ 'pspell_save_wordlist(': 'int dictionary_link | bool', -\ 'pspell_store_replacement(': 'int dictionary_link, string misspelled, string correct | bool', -\ 'pspell_suggest(': 'int dictionary_link, string word | array', -\ 'ps_place_image(': 'resource psdoc, int imageid, float x, float y, float scale | bool', -\ 'ps_rect(': 'resource psdoc, float x, float y, float width, float height | bool', -\ 'ps_restore(': 'resource psdoc | bool', -\ 'ps_rotate(': 'resource psdoc, float rot | bool', -\ 'ps_save(': 'resource psdoc | bool', -\ 'ps_scale(': 'resource psdoc, float x, float y | bool', -\ 'ps_set_border_color(': 'resource psdoc, float red, float green, float blue | bool', -\ 'ps_set_border_dash(': 'resource psdoc, float black, float white | bool', -\ 'ps_set_border_style(': 'resource psdoc, string style, float width | bool', -\ 'ps_setcolor(': 'resource psdoc, string type, string colorspace, float c1, float c2, float c3, float c4 | bool', -\ 'ps_setdash(': 'resource psdoc, float on, float off | bool', -\ 'ps_setflat(': 'resource psdoc, float value | bool', -\ 'ps_setfont(': 'resource psdoc, int fontid, float size | bool', -\ 'ps_setgray(': 'resource psdoc, float gray | bool', -\ 'ps_set_info(': 'resource p, string key, string val | bool', -\ 'ps_setlinecap(': 'resource psdoc, int type | bool', -\ 'ps_setlinejoin(': 'resource psdoc, int type | bool', -\ 'ps_setlinewidth(': 'resource psdoc, float width | bool', -\ 'ps_setmiterlimit(': 'resource psdoc, float value | bool', -\ 'ps_set_parameter(': 'resource psdoc, string name, string value | bool', -\ 'ps_setpolydash(': 'resource psdoc, float arr | bool', -\ 'ps_set_text_pos(': 'resource psdoc, float x, float y | bool', -\ 'ps_set_value(': 'resource psdoc, string name, float value | bool', -\ 'ps_shading(': 'resource psdoc, string type, float x0, float y0, float x1, float y1, float c1, float c2, float c3, float c4, string optlist | int', -\ 'ps_shading_pattern(': 'resource psdoc, int shadingid, string optlist | int', -\ 'ps_shfill(': 'resource psdoc, int shadingid | bool', -\ 'ps_show_boxed(': 'resource psdoc, string text, float left, float bottom, float width, float height, string hmode [, string feature] | int', -\ 'ps_show(': 'resource psdoc, string text | bool', -\ 'ps_show_xy(': 'resource psdoc, string text, float x, float y | bool', -\ 'ps_string_geometry(': 'resource psdoc, string text [, int fontid [, float size]] | array', -\ 'ps_stringwidth(': 'resource psdoc, string text [, int fontid [, float size]] | float', -\ 'ps_stroke(': 'resource psdoc | bool', -\ 'ps_symbol(': 'resource psdoc, int ord | bool', -\ 'ps_symbol_name(': 'resource psdoc, int ord [, int fontid] | string', -\ 'ps_symbol_width(': 'resource psdoc, int ord [, int fontid [, float size]] | float', -\ 'ps_translate(': 'resource psdoc, float x, float y | bool', -\ 'putenv(': 'string setting | bool', -\ 'px_close(': 'resource pxdoc | bool', -\ 'px_create_fp(': 'resource pxdoc, resource file, array fielddesc | bool', -\ 'px_date2string(': 'resource pxdoc, int value, string format | string', -\ 'px_delete(': 'resource pxdoc | bool', -\ 'px_delete_record(': 'resource pxdoc, int num | bool', -\ 'px_get_field(': 'resource pxdoc, int fieldno | array', -\ 'px_get_info(': 'resource pxdoc | array', -\ 'px_get_parameter(': 'resource pxdoc, string name | string', -\ 'px_get_record(': 'resource pxdoc, int num [, int mode] | array', -\ 'px_get_schema(': 'resource pxdoc [, int mode] | array', -\ 'px_get_value(': 'resource pxdoc, string name | float', -\ 'px_insert_record(': 'resource pxdoc, array data | int', -\ 'px_new(': 'void | resource', -\ 'px_numfields(': 'resource pxdoc | int', -\ 'px_numrecords(': 'resource pxdoc | int', -\ 'px_open_fp(': 'resource pxdoc, resource file | bool', -\ 'px_put_record(': 'resource pxdoc, array record [, int recpos] | bool', -\ 'px_retrieve_record(': 'resource pxdoc, int num [, int mode] | array', -\ 'px_set_blob_file(': 'resource pxdoc, string filename | bool', -\ 'px_set_parameter(': 'resource pxdoc, string name, string value | bool', -\ 'px_set_tablename(': 'resource pxdoc, string name | void', -\ 'px_set_targetencoding(': 'resource pxdoc, string encoding | bool', -\ 'px_set_value(': 'resource pxdoc, string name, float value | bool', -\ 'px_timestamp2string(': 'resource pxdoc, float value, string format | string', -\ 'px_update_record(': 'resource pxdoc, array data, int num | bool', -\ 'qdom_error(': 'void | string', -\ 'qdom_tree(': 'string doc | QDomDocument', -\ 'quoted_printable_decode(': 'string str | string', -\ 'quotemeta(': 'string str | string', -\ 'rad2deg(': 'float number | float', -\ 'radius_acct_open(': 'void | resource', -\ 'radius_add_server(': 'resource radius_handle, string hostname, int port, string secret, int timeout, int max_tries | bool', -\ 'radius_auth_open(': 'void | resource', -\ 'radius_close(': 'resource radius_handle | bool', -\ 'radius_config(': 'resource radius_handle, string file | bool', -\ 'radius_create_request(': 'resource radius_handle, int type | bool', -\ 'radius_cvt_addr(': 'string data | string', -\ 'radius_cvt_int(': 'string data | int', -\ 'radius_cvt_string(': 'string data | string', -\ 'radius_demangle(': 'resource radius_handle, string mangled | string', -\ 'radius_demangle_mppe_key(': 'resource radius_handle, string mangled | string', -\ 'radius_get_attr(': 'resource radius_handle | mixed', -\ 'radius_get_vendor_attr(': 'string data | array', -\ 'radius_put_addr(': 'resource radius_handle, int type, string addr | bool', -\ 'radius_put_attr(': 'resource radius_handle, int type, string value | bool', -\ 'radius_put_int(': 'resource radius_handle, int type, int value | bool', -\ 'radius_put_string(': 'resource radius_handle, int type, string value | bool', -\ 'radius_put_vendor_addr(': 'resource radius_handle, int vendor, int type, string addr | bool', -\ 'radius_put_vendor_attr(': 'resource radius_handle, int vendor, int type, string value | bool', -\ 'radius_put_vendor_int(': 'resource radius_handle, int vendor, int type, int value | bool', -\ 'radius_put_vendor_string(': 'resource radius_handle, int vendor, int type, string value | bool', -\ 'radius_request_authenticator(': 'resource radius_handle | string', -\ 'radius_send_request(': 'resource radius_handle | int', -\ 'radius_server_secret(': 'resource radius_handle | string', -\ 'radius_strerror(': 'resource radius_handle | string', -\ 'rand(': '[int min, int max] | int', -\ 'range(': 'mixed low, mixed high [, number step] | array', -\ 'rar_close(': 'resource rar_file | bool', -\ 'rar_entry_get(': 'resource rar_file, string entry_name | RarEntry', -\ 'rar_list(': 'resource rar_file | array', -\ 'rar_open(': 'string filename [, string password] | resource', -\ 'rawurldecode(': 'string str | string', -\ 'rawurlencode(': 'string str | string', -\ 'readdir(': 'resource dir_handle | string', -\ 'readfile(': 'string filename [, bool use_include_path [, resource context]] | int', -\ 'readgzfile(': 'string filename [, int use_include_path] | int', -\ 'readline_add_history(': 'string line | bool', -\ 'readline_callback_handler_install(': 'string prompt, callback callback | bool', -\ 'readline_callback_handler_remove(': 'void | bool', -\ 'readline_callback_read_char(': 'void | void', -\ 'readline_clear_history(': 'void | bool', -\ 'readline_completion_function(': 'callback function | bool', -\ 'readline(': 'string prompt | string', -\ 'readline_info(': '[string varname [, string newvalue]] | mixed', -\ 'readline_list_history(': 'void | array', -\ 'readline_on_new_line(': 'void | void', -\ 'readline_read_history(': '[string filename] | bool', -\ 'readline_redisplay(': 'void | void', -\ 'readline_write_history(': '[string filename] | bool', -\ 'readlink(': 'string path | string', -\ 'realpath(': 'string path | string', -\ 'recode_file(': 'string request, resource input, resource output | bool', -\ 'recode_string(': 'string request, string string | string', -\ 'register_shutdown_function(': 'callback function [, mixed parameter [, mixed ...]] | void', -\ 'register_tick_function(': 'callback function [, mixed arg [, mixed ...]] | bool', -\ 'rename_function(': 'string original_name, string new_name | bool', -\ 'rename(': 'string oldname, string newname [, resource context] | bool', -\ 'reset(': 'array &array | mixed', -\ 'restore_error_handler(': 'void | bool', -\ 'restore_exception_handler(': 'void | bool', -\ 'restore_include_path(': 'void | void', -\ 'rewinddir(': 'resource dir_handle | void', -\ 'rewind(': 'resource handle | bool', -\ 'rmdir(': 'string dirname [, resource context] | bool', -\ 'round(': 'float val [, int precision] | float', -\ 'rpm_close(': 'resource rpmr | boolean', -\ 'rpm_get_tag(': 'resource rpmr, int tagnum | mixed', -\ 'rpm_is_valid(': 'string filename | boolean', -\ 'rpm_open(': 'string filename | resource', -\ 'rpm_version(': 'void | string', -\ 'rsort(': 'array &array [, int sort_flags] | bool', -\ 'rtrim(': 'string str [, string charlist] | string', -\ 'runkit_class_adopt(': 'string classname, string parentname | bool', -\ 'runkit_class_emancipate(': 'string classname | bool', -\ 'runkit_constant_add(': 'string constname, mixed value | bool', -\ 'runkit_constant_redefine(': 'string constname, mixed newvalue | bool', -\ 'runkit_constant_remove(': 'string constname | bool', -\ 'runkit_function_add(': 'string funcname, string arglist, string code | bool', -\ 'runkit_function_copy(': 'string funcname, string targetname | bool', -\ 'runkit_function_redefine(': 'string funcname, string arglist, string code | bool', -\ 'runkit_function_remove(': 'string funcname | bool', -\ 'runkit_function_rename(': 'string funcname, string newname | bool', -\ 'runkit_import(': 'string filename [, int flags] | bool', -\ 'runkit_lint_file(': 'string filename | bool', -\ 'runkit_lint(': 'string code | bool', -\ 'runkit_method_add(': 'string classname, string methodname, string args, string code [, int flags] | bool', -\ 'runkit_method_copy(': 'string dClass, string dMethod, string sClass [, string sMethod] | bool', -\ 'runkit_method_redefine(': 'string classname, string methodname, string args, string code [, int flags] | bool', -\ 'runkit_method_remove(': 'string classname, string methodname | bool', -\ 'runkit_method_rename(': 'string classname, string methodname, string newname | bool', -\ 'runkit_return_value_used(': 'void | bool', -\ 'runkit_sandbox_output_handler(': 'object sandbox [, mixed callback] | mixed', -\ 'runkit_superglobals(': 'void | array', -\ 'satellite_caught_exception(': 'void | bool', -\ 'satellite_exception_id(': 'void | string', -\ 'satellite_exception_value(': 'void | OrbitStruct', -\ 'satellite_get_repository_id(': 'object obj | int', -\ 'satellite_load_idl(': 'string file | bool', -\ 'satellite_object_to_string(': 'object obj | string', -\ 'scandir(': 'string directory [, int sorting_order [, resource context]] | array', -\ 'sem_acquire(': 'resource sem_identifier | bool', -\ 'sem_get(': 'int key [, int max_acquire [, int perm [, int auto_release]]] | resource', -\ 'sem_release(': 'resource sem_identifier | bool', -\ 'sem_remove(': 'resource sem_identifier | bool', -\ 'serialize(': 'mixed value | string', -\ 'sesam_affected_rows(': 'string result_id | int', -\ 'sesam_commit(': 'void | bool', -\ 'sesam_connect(': 'string catalog, string schema, string user | bool', -\ 'sesam_diagnostic(': 'void | array', -\ 'sesam_disconnect(': 'void | bool', -\ 'sesam_errormsg(': 'void | string', -\ 'sesam_execimm(': 'string query | string', -\ 'sesam_fetch_array(': 'string result_id [, int whence [, int offset]] | array', -\ 'sesam_fetch_result(': 'string result_id [, int max_rows] | mixed', -\ 'sesam_fetch_row(': 'string result_id [, int whence [, int offset]] | array', -\ 'sesam_field_array(': 'string result_id | array', -\ 'sesam_field_name(': 'string result_id, int index | int', -\ 'sesam_free_result(': 'string result_id | int', -\ 'sesam_num_fields(': 'string result_id | int', -\ 'sesam_query(': 'string query [, bool scrollable] | string', -\ 'sesam_rollback(': 'void | bool', -\ 'sesam_seek_row(': 'string result_id, int whence [, int offset] | bool', -\ 'sesam_settransaction(': 'int isolation_level, int read_only | bool', -\ 'session_cache_expire(': '[int new_cache_expire] | int', -\ 'session_cache_limiter(': '[string cache_limiter] | string', -\ 'session_decode(': 'string data | bool', -\ 'session_destroy(': 'void | bool', -\ 'session_encode(': 'void | string', -\ 'session_get_cookie_params(': 'void | array', -\ 'session_id(': '[string id] | string', -\ 'session_is_registered(': 'string name | bool', -\ 'session_module_name(': '[string module] | string', -\ 'session_name(': '[string name] | string', -\ 'session_pgsql_add_error(': 'int error_level [, string error_message] | bool', -\ 'session_pgsql_get_error(': '[bool with_error_message] | array', -\ 'session_pgsql_get_field(': 'void | string', -\ 'session_pgsql_reset(': 'void | bool', -\ 'session_pgsql_set_field(': 'string value | bool', -\ 'session_pgsql_status(': 'void | array', -\ 'session_regenerate_id(': '[bool delete_old_session] | bool', -\ 'session_register(': 'mixed name [, mixed ...] | bool', -\ 'session_save_path(': '[string path] | string', -\ 'session_set_cookie_params(': 'int lifetime [, string path [, string domain [, bool secure]]] | void', -\ 'session_set_save_handler(': 'callback open, callback close, callback read, callback write, callback destroy, callback gc | bool', -\ 'session_start(': 'void | bool', -\ 'session_unregister(': 'string name | bool', -\ 'session_unset(': 'void | void', -\ 'session_write_close(': 'void | void', -\ 'setcookie(': 'string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] | bool', -\ 'set_error_handler(': 'callback error_handler [, int error_types] | mixed', -\ 'set_exception_handler(': 'callback exception_handler | string', -\ 'set_include_path(': 'string new_include_path | string', -\ 'setlocale(': 'int category, string locale [, string ...] | string', -\ 'set_magic_quotes_runtime(': 'int new_setting | bool', -\ 'setrawcookie(': 'string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] | bool', -\ 'set_time_limit(': 'int seconds | void', -\ 'settype(': 'mixed &var, string type | bool', -\ 'sha1_file(': 'string filename [, bool raw_output] | string', -\ 'sha1(': 'string str [, bool raw_output] | string', -\ 'shell_exec(': 'string cmd | string', -\ 'shm_attach(': 'int key [, int memsize [, int perm]] | int', -\ 'shm_detach(': 'int shm_identifier | bool', -\ 'shm_get_var(': 'int shm_identifier, int variable_key | mixed', -\ 'shmop_close(': 'int shmid | void', -\ 'shmop_delete(': 'int shmid | bool', -\ 'shmop_open(': 'int key, string flags, int mode, int size | int', -\ 'shmop_read(': 'int shmid, int start, int count | string', -\ 'shmop_size(': 'int shmid | int', -\ 'shmop_write(': 'int shmid, string data, int offset | int', -\ 'shm_put_var(': 'int shm_identifier, int variable_key, mixed variable | bool', -\ 'shm_remove(': 'int shm_identifier | bool', -\ 'shm_remove_var(': 'int shm_identifier, int variable_key | bool', -\ 'shuffle(': 'array &array | bool', -\ 'similar_text(': 'string first, string second [, float &percent] | int', -\ 'SimpleXMLElement->asXML(': '[string filename] | mixed', -\ 'simplexml_element->attributes(': '[string data] | SimpleXMLElement', -\ 'simplexml_element->children(': '[string nsprefix] | SimpleXMLElement', -\ 'SimpleXMLElement->xpath(': 'string path | array', -\ 'simplexml_import_dom(': 'DOMNode node [, string class_name] | SimpleXMLElement', -\ 'simplexml_load_file(': 'string filename [, string class_name [, int options]] | object', -\ 'simplexml_load_string(': 'string data [, string class_name [, int options]] | object', -\ 'sinh(': 'float arg | float', -\ 'sin(': 'float arg | float', -\ 'sleep(': 'int seconds | int', -\ 'snmpget(': 'string hostname, string community, string object_id [, int timeout [, int retries]] | string', -\ 'snmpgetnext(': 'string host, string community, string object_id [, int timeout [, int retries]] | string', -\ 'snmp_get_quick_print(': 'void | bool', -\ 'snmp_get_valueretrieval(': 'void | int', -\ 'snmp_read_mib(': 'string filename | bool', -\ 'snmprealwalk(': 'string host, string community, string object_id [, int timeout [, int retries]] | array', -\ 'snmp_set_enum_print(': 'int enum_print | void', -\ 'snmpset(': 'string hostname, string community, string object_id, string type, mixed value [, int timeout [, int retries]] | bool', -\ 'snmp_set_oid_numeric_print(': 'int oid_numeric_print | void', -\ 'snmp_set_quick_print(': 'bool quick_print | void', -\ 'snmp_set_valueretrieval(': 'int method | void', -\ 'snmpwalk(': 'string hostname, string community, string object_id [, int timeout [, int retries]] | array', -\ 'snmpwalkoid(': 'string hostname, string community, string object_id [, int timeout [, int retries]] | array', -\ 'socket_accept(': 'resource socket | resource', -\ 'socket_bind(': 'resource socket, string address [, int port] | bool', -\ 'socket_clear_error(': '[resource socket] | void', -\ 'socket_close(': 'resource socket | void', -\ 'socket_connect(': 'resource socket, string address [, int port] | bool', -\ 'socket_create(': 'int domain, int type, int protocol | resource', -\ 'socket_create_listen(': 'int port [, int backlog] | resource', -\ 'socket_create_pair(': 'int domain, int type, int protocol, array &fd | bool', -\ 'socket_get_option(': 'resource socket, int level, int optname | mixed', -\ 'socket_getpeername(': 'resource socket, string &addr [, int &port] | bool', -\ 'socket_getsockname(': 'resource socket, string &addr [, int &port] | bool', -\ 'socket_last_error(': '[resource socket] | int', -\ 'socket_listen(': 'resource socket [, int backlog] | bool', -\ 'socket_read(': 'resource socket, int length [, int type] | string', -\ 'socket_recvfrom(': 'resource socket, string &buf, int len, int flags, string &name [, int &port] | int', -\ 'socket_recv(': 'resource socket, string &buf, int len, int flags | int', -\ 'socket_select(': 'array &read, array &write, array &except, int tv_sec [, int tv_usec] | int', -\ 'socket_send(': 'resource socket, string buf, int len, int flags | int', -\ 'socket_sendto(': 'resource socket, string buf, int len, int flags, string addr [, int port] | int', -\ 'socket_set_block(': 'resource socket | bool', -\ 'socket_set_nonblock(': 'resource socket | bool', -\ 'socket_set_option(': 'resource socket, int level, int optname, mixed optval | bool', -\ 'socket_shutdown(': 'resource socket [, int how] | bool', -\ 'socket_strerror(': 'int errno | string', -\ 'socket_write(': 'resource socket, string buffer [, int length] | int', -\ 'sort(': 'array &array [, int sort_flags] | bool', -\ 'soundex(': 'string str | string', -\ 'spl_classes(': 'void | array', -\ 'split(': 'string pattern, string string [, int limit] | array', -\ 'spliti(': 'string pattern, string string [, int limit] | array', -\ 'sprintf(': 'string format [, mixed args [, mixed ...]] | string', -\ 'sqlite_array_query(': 'resource dbhandle, string query [, int result_type [, bool decode_binary]] | array', -\ 'sqlite_busy_timeout(': 'resource dbhandle, int milliseconds | void', -\ 'sqlite_changes(': 'resource dbhandle | int', -\ 'sqlite_close(': 'resource dbhandle | void', -\ 'sqlite_column(': 'resource result, mixed index_or_name [, bool decode_binary] | mixed', -\ 'sqlite_create_aggregate(': 'resource dbhandle, string function_name, callback step_func, callback finalize_func [, int num_args] | void', -\ 'sqlite_create_function(': 'resource dbhandle, string function_name, callback callback [, int num_args] | void', -\ 'sqlite_current(': 'resource result [, int result_type [, bool decode_binary]] | array', -\ 'sqlite_error_string(': 'int error_code | string', -\ 'sqlite_escape_string(': 'string item | string', -\ 'sqlite_exec(': 'resource dbhandle, string query [, string &error_msg] | bool', -\ 'sqlite_factory(': 'string filename [, int mode [, string &error_message]] | SQLiteDatabase', -\ 'sqlite_fetch_all(': 'resource result [, int result_type [, bool decode_binary]] | array', -\ 'sqlite_fetch_array(': 'resource result [, int result_type [, bool decode_binary]] | array', -\ 'sqlite_fetch_column_types(': 'string table_name, resource dbhandle [, int result_type] | array', -\ 'sqlite_fetch_object(': 'resource result [, string class_name [, array ctor_params [, bool decode_binary]]] | object', -\ 'sqlite_fetch_single(': 'resource result [, bool decode_binary] | string', -\ 'sqlite_field_name(': 'resource result, int field_index | string', -\ 'sqlite_has_more(': 'resource result | bool', -\ 'sqlite_has_prev(': 'resource result | bool', -\ 'sqlite_key(': 'resource result | int', -\ 'sqlite_last_error(': 'resource dbhandle | int', -\ 'sqlite_last_insert_rowid(': 'resource dbhandle | int', -\ 'sqlite_libencoding(': 'void | string', -\ 'sqlite_libversion(': 'void | string', -\ 'sqlite_next(': 'resource result | bool', -\ 'sqlite_num_fields(': 'resource result | int', -\ 'sqlite_num_rows(': 'resource result | int', -\ 'sqlite_open(': 'string filename [, int mode [, string &error_message]] | resource', -\ 'sqlite_popen(': 'string filename [, int mode [, string &error_message]] | resource', -\ 'sqlite_prev(': 'resource result | bool', -\ 'sqlite_query(': 'resource dbhandle, string query [, int result_type [, string &error_msg]] | resource', -\ 'sqlite_rewind(': 'resource result | bool', -\ 'sqlite_seek(': 'resource result, int rownum | bool', -\ 'sqlite_single_query(': 'resource db, string query [, bool first_row_only [, bool decode_binary]] | array', -\ 'sqlite_udf_decode_binary(': 'string data | string', -\ 'sqlite_udf_encode_binary(': 'string data | string', -\ 'sqlite_unbuffered_query(': 'resource dbhandle, string query [, int result_type [, string &error_msg]] | resource', -\ 'sqlite_valid(': 'resource result | bool', -\ 'sql_regcase(': 'string string | string', -\ 'sqrt(': 'float arg | float', -\ 'srand(': '[int seed] | void', -\ 'sscanf(': 'string str, string format [, mixed &...] | mixed', -\ 'ssh2_auth_hostbased_file(': 'resource session, string username, string hostname, string pubkeyfile, string privkeyfile [, string passphrase [, string local_username]] | bool', -\ 'ssh2_auth_none(': 'resource session, string username | mixed', -\ 'ssh2_auth_password(': 'resource session, string username, string password | bool', -\ 'ssh2_auth_pubkey_file(': 'resource session, string username, string pubkeyfile, string privkeyfile [, string passphrase] | bool', -\ 'ssh2_connect(': 'string host [, int port [, array methods [, array callbacks]]] | resource', -\ 'ssh2_exec(': 'resource session, string command [, string pty [, array env [, int width [, int height [, int width_height_type]]]]] | resource', -\ 'ssh2_fetch_stream(': 'resource channel, int streamid | resource', -\ 'ssh2_fingerprint(': 'resource session [, int flags] | string', -\ 'ssh2_methods_negotiated(': 'resource session | array', -\ 'ssh2_publickey_add(': 'resource pkey, string algoname, string blob [, bool overwrite [, array attributes]] | bool', -\ 'ssh2_publickey_init(': 'resource session | resource', -\ 'ssh2_publickey_list(': 'resource pkey | array', -\ 'ssh2_publickey_remove(': 'resource pkey, string algoname, string blob | bool', -\ 'ssh2_scp_recv(': 'resource session, string remote_file, string local_file | bool', -\ 'ssh2_scp_send(': 'resource session, string local_file, string remote_file [, int create_mode] | bool', -\ 'ssh2_sftp(': 'resource session | resource', -\ 'ssh2_sftp_lstat(': 'resource sftp, string path | array', -\ 'ssh2_sftp_mkdir(': 'resource sftp, string dirname [, int mode [, bool recursive]] | bool', -\ 'ssh2_sftp_readlink(': 'resource sftp, string link | string', -\ 'ssh2_sftp_realpath(': 'resource sftp, string filename | string', -\ 'ssh2_sftp_rename(': 'resource sftp, string from, string to | bool', -\ 'ssh2_sftp_rmdir(': 'resource sftp, string dirname | bool', -\ 'ssh2_sftp_stat(': 'resource sftp, string path | array', -\ 'ssh2_sftp_symlink(': 'resource sftp, string target, string link | bool', -\ 'ssh2_sftp_unlink(': 'resource sftp, string filename | bool', -\ 'ssh2_shell(': 'resource session [, string term_type [, array env [, int width [, int height [, int width_height_type]]]]] | resource', -\ 'ssh2_tunnel(': 'resource session, string host, int port | resource', -\ 'stat(': 'string filename | array', -\ 'stats_absolute_deviation(': 'array a | float', -\ 'stats_cdf_beta(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_binomial(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_cauchy(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_chisquare(': 'float par1, float par2, int which | float', -\ 'stats_cdf_exponential(': 'float par1, float par2, int which | float', -\ 'stats_cdf_f(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_gamma(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_laplace(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_logistic(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_negative_binomial(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_noncentral_chisquare(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_noncentral_f(': 'float par1, float par2, float par3, float par4, int which | float', -\ 'stats_cdf_poisson(': 'float par1, float par2, int which | float', -\ 'stats_cdf_t(': 'float par1, float par2, int which | float', -\ 'stats_cdf_uniform(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_weibull(': 'float par1, float par2, float par3, int which | float', -\ 'stats_covariance(': 'array a, array b | float', -\ 'stats_dens_beta(': 'float x, float a, float b | float', -\ 'stats_dens_cauchy(': 'float x, float ave, float stdev | float', -\ 'stats_dens_chisquare(': 'float x, float dfr | float', -\ 'stats_dens_exponential(': 'float x, float scale | float', -\ 'stats_dens_f(': 'float x, float dfr1, float dfr2 | float', -\ 'stats_dens_gamma(': 'float x, float shape, float scale | float', -\ 'stats_dens_laplace(': 'float x, float ave, float stdev | float', -\ 'stats_dens_logistic(': 'float x, float ave, float stdev | float', -\ 'stats_dens_negative_binomial(': 'float x, float n, float pi | float', -\ 'stats_dens_normal(': 'float x, float ave, float stdev | float', -\ 'stats_dens_pmf_binomial(': 'float x, float n, float pi | float', -\ 'stats_dens_pmf_hypergeometric(': 'float n1, float n2, float N1, float N2 | float', -\ 'stats_dens_pmf_poisson(': 'float x, float lb | float', -\ 'stats_dens_t(': 'float x, float dfr | float', -\ 'stats_dens_weibull(': 'float x, float a, float b | float', -\ 'stats_den_uniform(': 'float x, float a, float b | float', -\ 'stats_harmonic_mean(': 'array a | number', -\ 'stats_kurtosis(': 'array a | float', -\ 'stats_rand_gen_beta(': 'float a, float b | float', -\ 'stats_rand_gen_chisquare(': 'float df | float', -\ 'stats_rand_gen_exponential(': 'float av | float', -\ 'stats_rand_gen_f(': 'float dfn, float dfd | float', -\ 'stats_rand_gen_funiform(': 'float low, float high | float', -\ 'stats_rand_gen_gamma(': 'float a, float r | float', -\ 'stats_rand_gen_ibinomial(': 'int n, float pp | int', -\ 'stats_rand_gen_ibinomial_negative(': 'int n, float p | int', -\ 'stats_rand_gen_int(': 'void | int', -\ 'stats_rand_gen_ipoisson(': 'float mu | int', -\ 'stats_rand_gen_iuniform(': 'int low, int high | int', -\ 'stats_rand_gen_noncenral_chisquare(': 'float df, float xnonc | float', -\ 'stats_rand_gen_noncentral_f(': 'float dfn, float dfd, float xnonc | float', -\ 'stats_rand_gen_noncentral_t(': 'float df, float xnonc | float', -\ 'stats_rand_gen_normal(': 'float av, float sd | float', -\ 'stats_rand_gen_t(': 'float df | float', -\ 'stats_rand_get_seeds(': 'void | array', -\ 'stats_rand_phrase_to_seeds(': 'string phrase | array', -\ 'stats_rand_ranf(': 'void | float', -\ 'stats_rand_setall(': 'int iseed1, int iseed2 | void', -\ 'stats_skew(': 'array a | float', -\ 'stats_standard_deviation(': 'array a [, bool sample] | float', -\ 'stats_stat_binomial_coef(': 'int x, int n | float', -\ 'stats_stat_correlation(': 'array arr1, array arr2 | float', -\ 'stats_stat_gennch(': 'int n | float', -\ 'stats_stat_independent_t(': 'array arr1, array arr2 | float', -\ 'stats_stat_innerproduct(': 'array arr1, array arr2 | float', -\ 'stats_stat_noncentral_t(': 'float par1, float par2, float par3, int which | float', -\ 'stats_stat_paired_t(': 'array arr1, array arr2 | float', -\ 'stats_stat_percentile(': 'float df, float xnonc | float', -\ 'stats_stat_powersum(': 'array arr, float power | float', -\ 'stats_variance(': 'array a [, bool sample] | float', -\ 'strcasecmp(': 'string str1, string str2 | int', -\ 'strcmp(': 'string str1, string str2 | int', -\ 'strcoll(': 'string str1, string str2 | int', -\ 'strcspn(': 'string str1, string str2 [, int start [, int length]] | int', -\ 'stream_bucket_append(': 'resource brigade, resource bucket | void', -\ 'stream_bucket_make_writeable(': 'resource brigade | object', -\ 'stream_bucket_new(': 'resource stream, string buffer | object', -\ 'stream_bucket_prepend(': 'resource brigade, resource bucket | void', -\ 'stream_context_create(': '[array options] | resource', -\ 'stream_context_get_default(': '[array options] | resource', -\ 'stream_context_get_options(': 'resource stream_or_context | array', -\ 'stream_context_set_option(': 'resource stream_or_context, string wrapper, string option, mixed value | bool', -\ 'stream_context_set_params(': 'resource stream_or_context, array params | bool', -\ 'stream_copy_to_stream(': 'resource source, resource dest [, int maxlength [, int offset]] | int', -\ 'stream_filter_append(': 'resource stream, string filtername [, int read_write [, mixed params]] | resource', -\ 'stream_filter_prepend(': 'resource stream, string filtername [, int read_write [, mixed params]] | resource', -\ 'stream_filter_register(': 'string filtername, string classname | bool', -\ 'stream_filter_remove(': 'resource stream_filter | bool', -\ 'stream_get_contents(': 'resource handle [, int maxlength [, int offset]] | string', -\ 'stream_get_filters(': 'void | array', -\ 'stream_get_line(': 'resource handle, int length [, string ending] | string', -\ 'stream_get_meta_data(': 'resource stream | array', -\ 'stream_get_transports(': 'void | array', -\ 'stream_get_wrappers(': 'void | array', -\ 'stream_select(': 'array &read, array &write, array &except, int tv_sec [, int tv_usec] | int', -\ 'stream_set_blocking(': 'resource stream, int mode | bool', -\ 'stream_set_timeout(': 'resource stream, int seconds [, int microseconds] | bool', -\ 'stream_set_write_buffer(': 'resource stream, int buffer | int', -\ 'stream_socket_accept(': 'resource server_socket [, float timeout [, string &peername]] | resource', -\ 'stream_socket_client(': 'string remote_socket [, int &errno [, string &errstr [, float timeout [, int flags [, resource context]]]]] | resource', -\ 'stream_socket_enable_crypto(': 'resource stream, bool enable [, int crypto_type [, resource session_stream]] | mixed', -\ 'stream_socket_get_name(': 'resource handle, bool want_peer | string', -\ 'stream_socket_pair(': 'int domain, int type, int protocol | array', -\ 'stream_socket_recvfrom(': 'resource socket, int length [, int flags [, string &address]] | string', -\ 'stream_socket_sendto(': 'resource socket, string data [, int flags [, string address]] | int', -\ 'stream_socket_server(': 'string local_socket [, int &errno [, string &errstr [, int flags [, resource context]]]] | resource', -\ 'stream_wrapper_register(': 'string protocol, string classname | bool', -\ 'stream_wrapper_restore(': 'string protocol | bool', -\ 'stream_wrapper_unregister(': 'string protocol | bool', -\ 'strftime(': 'string format [, int timestamp] | string', -\ 'stripcslashes(': 'string str | string', -\ 'stripos(': 'string haystack, string needle [, int offset] | int', -\ 'stripslashes(': 'string str | string', -\ 'strip_tags(': 'string str [, string allowable_tags] | string', -\ 'str_ireplace(': 'mixed search, mixed replace, mixed subject [, int &count] | mixed', -\ 'stristr(': 'string haystack, string needle | string', -\ 'strlen(': 'string string | int', -\ 'strnatcasecmp(': 'string str1, string str2 | int', -\ 'strnatcmp(': 'string str1, string str2 | int', -\ 'strncasecmp(': 'string str1, string str2, int len | int', -\ 'strncmp(': 'string str1, string str2, int len | int', -\ 'str_pad(': 'string input, int pad_length [, string pad_string [, int pad_type]] | string', -\ 'strpbrk(': 'string haystack, string char_list | string', -\ 'strpos(': 'string haystack, mixed needle [, int offset] | int', -\ 'strptime(': 'string date, string format | array', -\ 'strrchr(': 'string haystack, string needle | string', -\ 'str_repeat(': 'string input, int multiplier | string', -\ 'str_replace(': 'mixed search, mixed replace, mixed subject [, int &count] | mixed', -\ 'strrev(': 'string string | string', -\ 'strripos(': 'string haystack, string needle [, int offset] | int', -\ 'str_rot13(': 'string str | string', -\ 'strrpos(': 'string haystack, string needle [, int offset] | int', -\ 'str_shuffle(': 'string str | string', -\ 'str_split(': 'string string [, int split_length] | array', -\ 'strspn(': 'string str1, string str2 [, int start [, int length]] | int', -\ 'strstr(': 'string haystack, string needle | string', -\ 'strtok(': 'string str, string token | string', -\ 'strtolower(': 'string str | string', -\ 'strtotime(': 'string time [, int now] | int', -\ 'strtoupper(': 'string string | string', -\ 'strtr(': 'string str, string from, string to | string', -\ 'strval(': 'mixed var | string', -\ 'str_word_count(': 'string string [, int format [, string charlist]] | mixed', -\ 'substr_compare(': 'string main_str, string str, int offset [, int length [, bool case_insensitivity]] | int', -\ 'substr_count(': 'string haystack, string needle [, int offset [, int length]] | int', -\ 'substr(': 'string string, int start [, int length] | string', -\ 'substr_replace(': 'mixed string, string replacement, int start [, int length] | mixed', -\ 'swf_actiongeturl(': 'string url, string target | void', -\ 'swf_actiongotoframe(': 'int framenumber | void', -\ 'swf_actiongotolabel(': 'string label | void', -\ 'swfaction(': 'string script | SWFAction', -\ 'swf_actionnextframe(': 'void | void', -\ 'swf_actionplay(': 'void | void', -\ 'swf_actionprevframe(': 'void | void', -\ 'swf_actionsettarget(': 'string target | void', -\ 'swf_actionstop(': 'void | void', -\ 'swf_actiontogglequality(': 'void | void', -\ 'swf_actionwaitforframe(': 'int framenumber, int skipcount | void', -\ 'swf_addbuttonrecord(': 'int states, int shapeid, int depth | void', -\ 'swf_addcolor(': 'float r, float g, float b, float a | void', -\ 'swfbitmap->getheight(': 'void | float', -\ 'swfbitmap->getwidth(': 'void | float', -\ 'swfbitmap(': 'mixed file [, mixed alphafile] | SWFBitmap', -\ 'swfbutton->addaction(': 'resource action, int flags | void', -\ 'swfbutton->addshape(': 'resource shape, int flags | void', -\ 'swfbutton(': 'void | SWFButton', -\ 'swfbutton->setaction(': 'resource action | void', -\ 'swfbutton->setdown(': 'resource shape | void', -\ 'swfbutton->sethit(': 'resource shape | void', -\ 'swfbutton->setover(': 'resource shape | void', -\ 'swfbutton->setup(': 'resource shape | void', -\ 'swf_closefile(': '[int return_file] | void', -\ 'swf_definebitmap(': 'int objid, string image_name | void', -\ 'swf_definefont(': 'int fontid, string fontname | void', -\ 'swf_defineline(': 'int objid, float x1, float y1, float x2, float y2, float width | void', -\ 'swf_definepoly(': 'int objid, array coords, int npoints, float width | void', -\ 'swf_definerect(': 'int objid, float x1, float y1, float x2, float y2, float width | void', -\ 'swf_definetext(': 'int objid, string str, int docenter | void', -\ 'swfdisplayitem->addcolor(': 'int red, int green, int blue [, int a] | void', -\ 'swfdisplayitem->move(': 'int dx, int dy | void', -\ 'swfdisplayitem->moveto(': 'int x, int y | void', -\ 'swfdisplayitem->multcolor(': 'int red, int green, int blue [, int a] | void', -\ 'swfdisplayitem->remove(': 'void | void', -\ 'swfdisplayitem->rotate(': 'float ddegrees | void', -\ 'swfdisplayitem->rotateto(': 'float degrees | void', -\ 'swfdisplayitem->scale(': 'int dx, int dy | void', -\ 'swfdisplayitem->scaleto(': 'int x [, int y] | void', -\ 'swfdisplayitem->setdepth(': 'float depth | void', -\ 'swfdisplayitem->setname(': 'string name | void', -\ 'swfdisplayitem->setratio(': 'float ratio | void', -\ 'swfdisplayitem->skewx(': 'float ddegrees | void', -\ 'swfdisplayitem->skewxto(': 'float degrees | void', -\ 'swfdisplayitem->skewy(': 'float ddegrees | void', -\ 'swfdisplayitem->skewyto(': 'float degrees | void', -\ 'swf_endbutton(': 'void | void', -\ 'swf_enddoaction(': 'void | void', -\ 'swf_endshape(': 'void | void', -\ 'swf_endsymbol(': 'void | void', -\ 'swffill(': 'void | SWFFill', -\ 'swffill->moveto(': 'int x, int y | void', -\ 'swffill->rotateto(': 'float degrees | void', -\ 'swffill->scaleto(': 'int x [, int y] | void', -\ 'swffill->skewxto(': 'float x | void', -\ 'swffill->skewyto(': 'float y | void', -\ 'swffont->getwidth(': 'string string | float', -\ 'swffont(': 'string filename | SWFFont', -\ 'swf_fontsize(': 'float size | void', -\ 'swf_fontslant(': 'float slant | void', -\ 'swf_fonttracking(': 'float tracking | void', -\ 'swf_getbitmapinfo(': 'int bitmapid | array', -\ 'swf_getfontinfo(': 'void | array', -\ 'swf_getframe(': 'void | int', -\ 'swfgradient->addentry(': 'float ratio, int red, int green, int blue [, int a] | void', -\ 'swfgradient(': 'void | SWFGradient', -\ 'swf_labelframe(': 'string name | void', -\ 'swf_lookat(': 'float view_x, float view_y, float view_z, float reference_x, float reference_y, float reference_z, float twist | void', -\ 'swf_modifyobject(': 'int depth, int how | void', -\ 'swfmorph->getshape1(': 'void | mixed', -\ 'swfmorph->getshape2(': 'void | mixed', -\ 'swfmorph(': 'void | SWFMorph', -\ 'swfmovie->add(': 'resource instance | void', -\ 'swfmovie(': 'void | SWFMovie', -\ 'swfmovie->nextframe(': 'void | void', -\ 'swfmovie->output(': '[int compression] | int', -\ 'swfmovie->remove(': 'resource instance | void', -\ 'swfmovie->save(': 'string filename [, int compression] | int', -\ 'swfmovie->setbackground(': 'int red, int green, int blue | void', -\ 'swfmovie->setdimension(': 'int width, int height | void', -\ 'swfmovie->setframes(': 'string numberofframes | void', -\ 'swfmovie->setrate(': 'int rate | void', -\ 'swfmovie->streammp3(': 'mixed mp3File | void', -\ 'swf_mulcolor(': 'float r, float g, float b, float a | void', -\ 'swf_nextid(': 'void | int', -\ 'swf_oncondition(': 'int transition | void', -\ 'swf_openfile(': 'string filename, float width, float height, float framerate, float r, float g, float b | void', -\ 'swf_ortho2(': 'float xmin, float xmax, float ymin, float ymax | void', -\ 'swf_ortho(': 'float xmin, float xmax, float ymin, float ymax, float zmin, float zmax | void', -\ 'swf_perspective(': 'float fovy, float aspect, float near, float far | void', -\ 'swf_placeobject(': 'int objid, int depth | void', -\ 'swf_polarview(': 'float dist, float azimuth, float incidence, float twist | void', -\ 'swf_popmatrix(': 'void | void', -\ 'swf_posround(': 'int round | void', -\ 'SWFPrebuiltClip(': '[string file] | SWFPrebuiltClip', -\ 'swf_pushmatrix(': 'void | void', -\ 'swf_removeobject(': 'int depth | void', -\ 'swf_rotate(': 'float angle, string axis | void', -\ 'swf_scale(': 'float x, float y, float z | void', -\ 'swf_setfont(': 'int fontid | void', -\ 'swf_setframe(': 'int framenumber | void', -\ 'SWFShape->addFill(': 'int red, int green, int blue [, int a] | SWFFill', -\ 'swf_shapearc(': 'float x, float y, float r, float ang1, float ang2 | void', -\ 'swf_shapecurveto3(': 'float x1, float y1, float x2, float y2, float x3, float y3 | void', -\ 'swf_shapecurveto(': 'float x1, float y1, float x2, float y2 | void', -\ 'swfshape->drawcurve(': 'int controldx, int controldy, int anchordx, int anchordy [, int targetdx, int targetdy] | int', -\ 'swfshape->drawcurveto(': 'int controlx, int controly, int anchorx, int anchory [, int targetx, int targety] | int', -\ 'swfshape->drawline(': 'int dx, int dy | void', -\ 'swfshape->drawlineto(': 'int x, int y | void', -\ 'swf_shapefillbitmapclip(': 'int bitmapid | void', -\ 'swf_shapefillbitmaptile(': 'int bitmapid | void', -\ 'swf_shapefilloff(': 'void | void', -\ 'swf_shapefillsolid(': 'float r, float g, float b, float a | void', -\ 'swfshape(': 'void | SWFShape', -\ 'swf_shapelinesolid(': 'float r, float g, float b, float a, float width | void', -\ 'swf_shapelineto(': 'float x, float y | void', -\ 'swfshape->movepen(': 'int dx, int dy | void', -\ 'swfshape->movepento(': 'int x, int y | void', -\ 'swf_shapemoveto(': 'float x, float y | void', -\ 'swfshape->setleftfill(': 'swfgradient fill | void', -\ 'swfshape->setline(': 'swfshape shape | void', -\ 'swfshape->setrightfill(': 'swfgradient fill | void', -\ 'swf_showframe(': 'void | void', -\ 'SWFSound(': 'string filename, int flags | SWFSound', -\ 'swfsprite->add(': 'resource object | void', -\ 'swfsprite(': 'void | SWFSprite', -\ 'swfsprite->nextframe(': 'void | void', -\ 'swfsprite->remove(': 'resource object | void', -\ 'swfsprite->setframes(': 'int numberofframes | void', -\ 'swf_startbutton(': 'int objid, int type | void', -\ 'swf_startdoaction(': 'void | void', -\ 'swf_startshape(': 'int objid | void', -\ 'swf_startsymbol(': 'int objid | void', -\ 'swftext->addstring(': 'string string | void', -\ 'swftextfield->addstring(': 'string string | void', -\ 'swftextfield->align(': 'int alignement | void', -\ 'swftextfield(': '[int flags] | SWFTextField', -\ 'swftextfield->setbounds(': 'int width, int height | void', -\ 'swftextfield->setcolor(': 'int red, int green, int blue [, int a] | void', -\ 'swftextfield->setfont(': 'string font | void', -\ 'swftextfield->setheight(': 'int height | void', -\ 'swftextfield->setindentation(': 'int width | void', -\ 'swftextfield->setleftmargin(': 'int width | void', -\ 'swftextfield->setlinespacing(': 'int height | void', -\ 'swftextfield->setmargins(': 'int left, int right | void', -\ 'swftextfield->setname(': 'string name | void', -\ 'swftextfield->setrightmargin(': 'int width | void', -\ 'swftext->getwidth(': 'string string | float', -\ 'swftext(': 'void | SWFText', -\ 'swftext->moveto(': 'int x, int y | void', -\ 'swftext->setcolor(': 'int red, int green, int blue [, int a] | void', -\ 'swftext->setfont(': 'string font | void', -\ 'swftext->setheight(': 'int height | void', -\ 'swftext->setspacing(': 'float spacing | void', -\ 'swf_textwidth(': 'string str | float', -\ 'swf_translate(': 'float x, float y, float z | void', -\ 'SWFVideoStream(': '[string file] | SWFVideoStream', -\ 'swf_viewport(': 'float xmin, float xmax, float ymin, float ymax | void', -\ 'sybase_affected_rows(': '[resource link_identifier] | int', -\ 'sybase_close(': '[resource link_identifier] | bool', -\ 'sybase_connect(': '[string servername [, string username [, string password [, string charset [, string appname]]]]] | resource', -\ 'sybase_data_seek(': 'resource result_identifier, int row_number | bool', -\ 'sybase_deadlock_retry_count(': 'int retry_count | void', -\ 'sybase_fetch_array(': 'resource result | array', -\ 'sybase_fetch_assoc(': 'resource result | array', -\ 'sybase_fetch_field(': 'resource result [, int field_offset] | object', -\ 'sybase_fetch_object(': 'resource result [, mixed object] | object', -\ 'sybase_fetch_row(': 'resource result | array', -\ 'sybase_field_seek(': 'resource result, int field_offset | bool', -\ 'sybase_free_result(': 'resource result | bool', -\ 'sybase_get_last_message(': 'void | string', -\ 'sybase_min_client_severity(': 'int severity | void', -\ 'sybase_min_error_severity(': 'int severity | void', -\ 'sybase_min_message_severity(': 'int severity | void', -\ 'sybase_min_server_severity(': 'int severity | void', -\ 'sybase_num_fields(': 'resource result | int', -\ 'sybase_num_rows(': 'resource result | int', -\ 'sybase_pconnect(': '[string servername [, string username [, string password [, string charset [, string appname]]]]] | resource', -\ 'sybase_query(': 'string query [, resource link_identifier] | mixed', -\ 'sybase_result(': 'resource result, int row, mixed field | string', -\ 'sybase_select_db(': 'string database_name [, resource link_identifier] | bool', -\ 'sybase_set_message_handler(': 'callback handler [, resource connection] | bool', -\ 'sybase_unbuffered_query(': 'string query, resource link_identifier [, bool store_result] | resource', -\ 'symlink(': 'string target, string link | bool', -\ 'sys_getloadavg(': 'void | array', -\ 'syslog(': 'int priority, string message | bool', -\ 'system(': 'string command [, int &return_var] | string', -\ 'tanh(': 'float arg | float', -\ 'tan(': 'float arg | float', -\ 'tcpwrap_check(': 'string daemon, string address [, string user [, bool nodns]] | bool', -\ 'tempnam(': 'string dir, string prefix | string', -\ 'textdomain(': 'string text_domain | string', -\ 'tidy_access_count(': 'tidy object | int', -\ 'tidy_config_count(': 'tidy object | int', -\ 'tidy_error_count(': 'tidy object | int', -\ 'tidy_get_output(': 'tidy object | string', -\ 'tidy_load_config(': 'string filename, string encoding | void', -\ 'tidy_node->get_attr(': 'int attrib_id | tidy_attr', -\ 'tidy_node->get_nodes(': 'int node_id | array', -\ 'tidyNode->hasChildren(': 'void | bool', -\ 'tidyNode->hasSiblings(': 'void | bool', -\ 'tidyNode->isAsp(': 'void | bool', -\ 'tidyNode->isComment(': 'void | bool', -\ 'tidyNode->isHtml(': 'void | bool', -\ 'tidyNode->isJste(': 'void | bool', -\ 'tidyNode->isPhp(': 'void | bool', -\ 'tidyNode->isText(': 'void | bool', -\ 'tidy_node->next(': 'void | tidy_node', -\ 'tidy_node->prev(': 'void | tidy_node', -\ 'tidy_repair_file(': 'string filename [, mixed config [, string encoding [, bool use_include_path]]] | string', -\ 'tidy_repair_string(': 'string data [, mixed config [, string encoding]] | string', -\ 'tidy_reset_config(': 'void | bool', -\ 'tidy_save_config(': 'string filename | bool', -\ 'tidy_set_encoding(': 'string encoding | bool', -\ 'tidy_setopt(': 'string option, mixed value | bool', -\ 'tidy_warning_count(': 'tidy object | int', -\ 'time(': 'void | int', -\ 'time_nanosleep(': 'int seconds, int nanoseconds | mixed', -\ 'time_sleep_until(': 'float timestamp | bool', -\ 'tmpfile(': 'void | resource', -\ 'token_get_all(': 'string source | array', -\ 'token_name(': 'int token | string', -\ 'touch(': 'string filename [, int time [, int atime]] | bool', -\ 'trigger_error(': 'string error_msg [, int error_type] | bool', -\ 'trim(': 'string str [, string charlist] | string', -\ 'uasort(': 'array &array, callback cmp_function | bool', -\ 'ucfirst(': 'string str | string', -\ 'ucwords(': 'string str | string', -\ 'udm_add_search_limit(': 'resource agent, int var, string val | bool', -\ 'udm_alloc_agent_array(': 'array databases | resource', -\ 'udm_alloc_agent(': 'string dbaddr [, string dbmode] | resource', -\ 'udm_api_version(': 'void | int', -\ 'udm_cat_list(': 'resource agent, string category | array', -\ 'udm_cat_path(': 'resource agent, string category | array', -\ 'udm_check_charset(': 'resource agent, string charset | bool', -\ 'udm_check_stored(': 'resource agent, int link, string doc_id | int', -\ 'udm_clear_search_limits(': 'resource agent | bool', -\ 'udm_close_stored(': 'resource agent, int link | int', -\ 'udm_crc32(': 'resource agent, string str | int', -\ 'udm_errno(': 'resource agent | int', -\ 'udm_error(': 'resource agent | string', -\ 'udm_find(': 'resource agent, string query | resource', -\ 'udm_free_agent(': 'resource agent | int', -\ 'udm_free_ispell_data(': 'int agent | bool', -\ 'udm_free_res(': 'resource res | bool', -\ 'udm_get_doc_count(': 'resource agent | int', -\ 'udm_get_res_field(': 'resource res, int row, int field | string', -\ 'udm_get_res_param(': 'resource res, int param | string', -\ 'udm_hash32(': 'resource agent, string str | int', -\ 'udm_load_ispell_data(': 'resource agent, int var, string val1, string val2, int flag | bool', -\ 'udm_open_stored(': 'resource agent, string storedaddr | int', -\ 'udm_set_agent_param(': 'resource agent, int var, string val | bool', -\ 'uksort(': 'array &array, callback cmp_function | bool', -\ 'umask(': '[int mask] | int', -\ 'unicode_encode(': 'unicode input, string encoding | string', -\ 'unicode_semantics(': 'void | bool', -\ 'uniqid(': '[string prefix [, bool more_entropy]] | string', -\ 'unixtojd(': '[int timestamp] | int', -\ 'unlink(': 'string filename [, resource context] | bool', -\ 'unpack(': 'string format, string data | array', -\ 'unregister_tick_function(': 'string function_name | void', -\ 'unserialize(': 'string str | mixed', -\ 'unset(': 'mixed var [, mixed var [, mixed ...]] | void', -\ 'urldecode(': 'string str | string', -\ 'urlencode(': 'string str | string', -\ 'use_soap_error_handler(': '[bool handler] | bool', -\ 'usleep(': 'int micro_seconds | void', -\ 'usort(': 'array &array, callback cmp_function | bool', -\ 'utf8_decode(': 'string data | string', -\ 'utf8_encode(': 'string data | string', -\ 'var_dump(': 'mixed expression [, mixed expression [, ...]] | void', -\ 'var_export(': 'mixed expression [, bool return] | mixed', -\ 'variant_abs(': 'mixed val | mixed', -\ 'variant_add(': 'mixed left, mixed right | mixed', -\ 'variant_and(': 'mixed left, mixed right | mixed', -\ 'variant_cast(': 'variant variant, int type | variant', -\ 'variant_cat(': 'mixed left, mixed right | mixed', -\ 'variant_cmp(': 'mixed left, mixed right [, int lcid [, int flags]] | int', -\ 'variant_date_from_timestamp(': 'int timestamp | variant', -\ 'variant_date_to_timestamp(': 'variant variant | int', -\ 'variant_div(': 'mixed left, mixed right | mixed', -\ 'variant_eqv(': 'mixed left, mixed right | mixed', -\ 'variant_fix(': 'mixed variant | mixed', -\ 'variant_get_type(': 'variant variant | int', -\ 'variant_idiv(': 'mixed left, mixed right | mixed', -\ 'variant_imp(': 'mixed left, mixed right | mixed', -\ 'variant_int(': 'mixed variant | mixed', -\ 'variant_mod(': 'mixed left, mixed right | mixed', -\ 'variant_mul(': 'mixed left, mixed right | mixed', -\ 'variant_neg(': 'mixed variant | mixed', -\ 'variant_not(': 'mixed variant | mixed', -\ 'variant_or(': 'mixed left, mixed right | mixed', -\ 'variant_pow(': 'mixed left, mixed right | mixed', -\ 'variant_round(': 'mixed variant, int decimals | mixed', -\ 'variant_set(': 'variant variant, mixed value | void', -\ 'variant_set_type(': 'variant variant, int type | void', -\ 'variant_sub(': 'mixed left, mixed right | mixed', -\ 'variant_xor(': 'mixed left, mixed right | mixed', -\ 'version_compare(': 'string version1, string version2 [, string operator] | mixed', -\ 'vfprintf(': 'resource handle, string format, array args | int', -\ 'virtual(': 'string filename | bool', -\ 'vpopmail_add_alias_domain_ex(': 'string olddomain, string newdomain | bool', -\ 'vpopmail_add_alias_domain(': 'string domain, string aliasdomain | bool', -\ 'vpopmail_add_domain_ex(': 'string domain, string passwd [, string quota [, string bounce [, bool apop]]] | bool', -\ 'vpopmail_add_domain(': 'string domain, string dir, int uid, int gid | bool', -\ 'vpopmail_add_user(': 'string user, string domain, string password [, string gecos [, bool apop]] | bool', -\ 'vpopmail_alias_add(': 'string user, string domain, string alias | bool', -\ 'vpopmail_alias_del_domain(': 'string domain | bool', -\ 'vpopmail_alias_del(': 'string user, string domain | bool', -\ 'vpopmail_alias_get_all(': 'string domain | array', -\ 'vpopmail_alias_get(': 'string alias, string domain | array', -\ 'vpopmail_auth_user(': 'string user, string domain, string password [, string apop] | bool', -\ 'vpopmail_del_domain_ex(': 'string domain | bool', -\ 'vpopmail_del_domain(': 'string domain | bool', -\ 'vpopmail_del_user(': 'string user, string domain | bool', -\ 'vpopmail_error(': 'void | string', -\ 'vpopmail_passwd(': 'string user, string domain, string password [, bool apop] | bool', -\ 'vpopmail_set_user_quota(': 'string user, string domain, string quota | bool', -\ 'vprintf(': 'string format, array args | int', -\ 'vsprintf(': 'string format, array args | string', -\ 'w32api_deftype(': 'string typename, string member1_type, string member1_name [, string ... [, string ...]] | bool', -\ 'w32api_init_dtype(': 'string typename, mixed value [, mixed ...] | resource', -\ 'w32api_invoke_function(': 'string funcname, mixed argument [, mixed ...] | mixed', -\ 'w32api_register_function(': 'string library, string function_name, string return_type | bool', -\ 'w32api_set_call_method(': 'int method | void', -\ 'wddx_add_vars(': 'int packet_id, mixed name_var [, mixed ...] | bool', -\ 'wddx_packet_end(': 'resource packet_id | string', -\ 'wddx_packet_start(': '[string comment] | resource', -\ 'wddx_serialize_value(': 'mixed var [, string comment] | string', -\ 'wddx_serialize_vars(': 'mixed var_name [, mixed ...] | string', -\ 'wddx_unserialize(': 'string packet | mixed', -\ 'win32_create_service(': 'array details [, string machine] | int', -\ 'win32_delete_service(': 'string servicename [, string machine] | int', -\ 'win32_get_last_control_message(': 'void | int', -\ 'win32_ps_list_procs(': 'void | array', -\ 'win32_ps_stat_mem(': 'void | array', -\ 'win32_ps_stat_proc(': '[int pid] | array', -\ 'win32_query_service_status(': 'string servicename [, string machine] | mixed', -\ 'win32_set_service_status(': 'int status | bool', -\ 'win32_start_service_ctrl_dispatcher(': 'string name | bool', -\ 'win32_start_service(': 'string servicename [, string machine] | int', -\ 'win32_stop_service(': 'string servicename [, string machine] | int', -\ 'wordwrap(': 'string str [, int width [, string break [, bool cut]]] | string', -\ 'xattr_get(': 'string filename, string name [, int flags] | string', -\ 'xattr_list(': 'string filename [, int flags] | array', -\ 'xattr_remove(': 'string filename, string name [, int flags] | bool', -\ 'xattr_set(': 'string filename, string name, string value [, int flags] | bool', -\ 'xattr_supported(': 'string filename [, int flags] | bool', -\ 'xdiff_file_diff_binary(': 'string file1, string file2, string dest | bool', -\ 'xdiff_file_diff(': 'string file1, string file2, string dest [, int context [, bool minimal]] | bool', -\ 'xdiff_file_merge3(': 'string file1, string file2, string file3, string dest | mixed', -\ 'xdiff_file_patch_binary(': 'string file, string patch, string dest | bool', -\ 'xdiff_file_patch(': 'string file, string patch, string dest [, int flags] | mixed', -\ 'xdiff_string_diff_binary(': 'string str1, string str2 | string', -\ 'xdiff_string_diff(': 'string str1, string str2 [, int context [, bool minimal]] | string', -\ 'xdiff_string_merge3(': 'string str1, string str2, string str3 [, string &error] | mixed', -\ 'xdiff_string_patch_binary(': 'string str, string patch | string', -\ 'xdiff_string_patch(': 'string str, string patch [, int flags [, string &error]] | string', -\ 'xml_error_string(': 'int code | string', -\ 'xml_get_current_byte_index(': 'resource parser | int', -\ 'xml_get_current_column_number(': 'resource parser | int', -\ 'xml_get_current_line_number(': 'resource parser | int', -\ 'xml_get_error_code(': 'resource parser | int', -\ 'xml_parse(': 'resource parser, string data [, bool is_final] | int', -\ 'xml_parse_into_struct(': 'resource parser, string data, array &values [, array &index] | int', -\ 'xml_parser_create(': '[string encoding] | resource', -\ 'xml_parser_create_ns(': '[string encoding [, string separator]] | resource', -\ 'xml_parser_free(': 'resource parser | bool', -\ 'xml_parser_get_option(': 'resource parser, int option | mixed', -\ 'xml_parser_set_option(': 'resource parser, int option, mixed value | bool', -\ 'xmlrpc_decode(': 'string xml [, string encoding] | array', -\ 'xmlrpc_decode_request(': 'string xml, string &method [, string encoding] | array', -\ 'xmlrpc_encode(': 'mixed value | string', -\ 'xmlrpc_encode_request(': 'string method, mixed params [, array output_options] | string', -\ 'xmlrpc_get_type(': 'mixed value | string', -\ 'xmlrpc_is_fault(': 'array arg | bool', -\ 'xmlrpc_parse_method_descriptions(': 'string xml | array', -\ 'xmlrpc_server_add_introspection_data(': 'resource server, array desc | int', -\ 'xmlrpc_server_call_method(': 'resource server, string xml, mixed user_data [, array output_options] | string', -\ 'xmlrpc_server_create(': 'void | resource', -\ 'xmlrpc_server_destroy(': 'resource server | int', -\ 'xmlrpc_server_register_introspection_callback(': 'resource server, string function | bool', -\ 'xmlrpc_server_register_method(': 'resource server, string method_name, string function | bool', -\ 'xmlrpc_set_type(': 'string &value, string type | bool', -\ 'xml_set_character_data_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_default_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_element_handler(': 'resource parser, callback start_element_handler, callback end_element_handler | bool', -\ 'xml_set_end_namespace_decl_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_external_entity_ref_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_notation_decl_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_object(': 'resource parser, object &object | bool', -\ 'xml_set_processing_instruction_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_start_namespace_decl_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_unparsed_entity_decl_handler(': 'resource parser, callback handler | bool', -\ 'xmlwriter_end_attribute(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_cdata(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_comment(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_document(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_dtd_attlist(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_dtd_element(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_dtd_entity(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_dtd(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_element(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_pi(': 'resource xmlwriter | bool', -\ 'xmlwriter_flush(': 'resource xmlwriter [, bool empty] | mixed', -\ 'xmlwriter_full_end_element(': 'resource xmlwriter | bool', -\ 'xmlwriter_open_memory(': 'void | resource', -\ 'xmlwriter_open_uri(': 'string source | resource', -\ 'xmlwriter_output_memory(': 'resource xmlwriter [, bool flush] | string', -\ 'xmlwriter_set_indent(': 'resource xmlwriter, bool indent | bool', -\ 'xmlwriter_set_indent_string(': 'resource xmlwriter, string indentString | bool', -\ 'xmlwriter_start_attribute(': 'resource xmlwriter, string name | bool', -\ 'xmlwriter_start_attribute_ns(': 'resource xmlwriter, string prefix, string name, string uri | bool', -\ 'xmlwriter_start_cdata(': 'resource xmlwriter | bool', -\ 'xmlwriter_start_comment(': 'resource xmlwriter | bool', -\ 'xmlwriter_start_document(': 'resource xmlwriter [, string version [, string encoding [, string standalone]]] | bool', -\ 'xmlwriter_start_dtd_attlist(': 'resource xmlwriter, string name | bool', -\ 'xmlwriter_start_dtd_element(': 'resource xmlwriter, string name | bool', -\ 'xmlwriter_start_dtd_entity(': 'resource xmlwriter, string name, bool isparam | bool', -\ 'xmlwriter_start_dtd(': 'resource xmlwriter, string name [, string pubid [, string sysid]] | bool', -\ 'xmlwriter_start_element(': 'resource xmlwriter, string name | bool', -\ 'xmlwriter_start_element_ns(': 'resource xmlwriter, string prefix, string name, string uri | bool', -\ 'xmlwriter_start_pi(': 'resource xmlwriter, string target | bool', -\ 'xmlwriter_text(': 'resource xmlwriter, string content | bool', -\ 'xmlwriter_write_attribute(': 'resource xmlwriter, string name, string content | bool', -\ 'xmlwriter_write_attribute_ns(': 'resource xmlwriter, string prefix, string name, string uri, string content | bool', -\ 'xmlwriter_write_cdata(': 'resource xmlwriter, string content | bool', -\ 'xmlwriter_write_comment(': 'resource xmlwriter, string content | bool', -\ 'xmlwriter_write_dtd_attlist(': 'resource xmlwriter, string name, string content | bool', -\ 'xmlwriter_write_dtd_element(': 'resource xmlwriter, string name, string content | bool', -\ 'xmlwriter_write_dtd_entity(': 'resource xmlwriter, string name, string content | bool', -\ 'xmlwriter_write_dtd(': 'resource xmlwriter, string name [, string pubid [, string sysid [, string subset]]] | bool', -\ 'xmlwriter_write_element(': 'resource xmlwriter, string name, string content | bool', -\ 'xmlwriter_write_element_ns(': 'resource xmlwriter, string prefix, string name, string uri, string content | bool', -\ 'xmlwriter_write_pi(': 'resource xmlwriter, string target, string content | bool', -\ 'xmlwriter_write_raw(': 'resource xmlwriter, string content | bool', -\ 'xpath_new_context(': 'domdocument dom_document | XPathContext', -\ 'xpath_register_ns_auto(': 'XPathContext xpath_context [, object context_node] | bool', -\ 'xpath_register_ns(': 'XPathContext xpath_context, string prefix, string uri | bool', -\ 'xptr_new_context(': 'void | XPathContext', -\ 'xslt_backend_info(': 'void | string', -\ 'xslt_backend_name(': 'void | string', -\ 'xslt_backend_version(': 'void | string', -\ 'xslt_create(': 'void | resource', -\ 'xslt_errno(': 'resource xh | int', -\ 'xslt_error(': 'resource xh | string', -\ 'xslt_free(': 'resource xh | void', -\ 'xslt_getopt(': 'resource processor | int', -\ 'xslt_process(': 'resource xh, string xmlcontainer, string xslcontainer [, string resultcontainer [, array arguments [, array parameters]]] | mixed', -\ 'xslt_set_base(': 'resource xh, string uri | void', -\ 'xslt_set_encoding(': 'resource xh, string encoding | void', -\ 'xslt_set_error_handler(': 'resource xh, mixed handler | void', -\ 'xslt_set_log(': 'resource xh [, mixed log] | void', -\ 'xslt_set_object(': 'resource processor, object &obj | bool', -\ 'xslt_setopt(': 'resource processor, int newmask | mixed', -\ 'xslt_set_sax_handler(': 'resource xh, array handlers | void', -\ 'xslt_set_sax_handlers(': 'resource processor, array handlers | void', -\ 'xslt_set_scheme_handler(': 'resource xh, array handlers | void', -\ 'xslt_set_scheme_handlers(': 'resource processor, array handlers | void', -\ 'yaz_addinfo(': 'resource id | string', -\ 'yaz_ccl_conf(': 'resource id, array config | void', -\ 'yaz_ccl_parse(': 'resource id, string query, array &result | bool', -\ 'yaz_close(': 'resource id | bool', -\ 'yaz_connect(': 'string zurl [, mixed options] | mixed', -\ 'yaz_database(': 'resource id, string databases | bool', -\ 'yaz_element(': 'resource id, string elementset | bool', -\ 'yaz_errno(': 'resource id | int', -\ 'yaz_error(': 'resource id | string', -\ 'yaz_es_result(': 'resource id | array', -\ 'yaz_get_option(': 'resource id, string name | string', -\ 'yaz_hits(': 'resource id [, array searchresult] | int', -\ 'yaz_itemorder(': 'resource id, array args | void', -\ 'yaz_present(': 'resource id | bool', -\ 'yaz_range(': 'resource id, int start, int number | void', -\ 'yaz_record(': 'resource id, int pos, string type | string', -\ 'yaz_scan(': 'resource id, string type, string startterm [, array flags] | void', -\ 'yaz_scan_result(': 'resource id [, array &result] | array', -\ 'yaz_schema(': 'resource id, string schema | void', -\ 'yaz_search(': 'resource id, string type, string query | bool', -\ 'yaz_set_option(': 'resource id, string name, string value | void', -\ 'yaz_sort(': 'resource id, string criteria | void', -\ 'yaz_syntax(': 'resource id, string syntax | void', -\ 'yaz_wait(': '[array &options] | mixed', -\ 'yp_all(': 'string domain, string map, string callback | void', -\ 'yp_cat(': 'string domain, string map | array', -\ 'yp_errno(': 'void | int', -\ 'yp_err_string(': 'int errorcode | string', -\ 'yp_first(': 'string domain, string map | array', -\ 'yp_get_default_domain(': 'void | string', -\ 'yp_master(': 'string domain, string map | string', -\ 'yp_match(': 'string domain, string map, string key | string', -\ 'yp_next(': 'string domain, string map, string key | array', -\ 'yp_order(': 'string domain, string map | int', -\ 'zend_logo_guid(': 'void | string', -\ 'zend_version(': 'void | string', -\ 'zip_close(': 'resource zip | void', -\ 'zip_entry_close(': 'resource zip_entry | void', -\ 'zip_entry_compressedsize(': 'resource zip_entry | int', -\ 'zip_entry_compressionmethod(': 'resource zip_entry | string', -\ 'zip_entry_filesize(': 'resource zip_entry | int', -\ 'zip_entry_name(': 'resource zip_entry | string', -\ 'zip_entry_open(': 'resource zip, resource zip_entry [, string mode] | bool', -\ 'zip_entry_read(': 'resource zip_entry [, int length] | string', -\ 'zip_open(': 'string filename | resource', -\ 'zip_read(': 'resource zip | resource', -\ 'zlib_get_coding_type(': 'void | string' -\ } + +function! phpcomplete#ParseDocBlock(docblock) " {{{ + let res = { + \ 'description': '', + \ 'params': [], + \ 'return': {}, + \ 'throws': [], + \ 'var': {}, + \ } + + let res.description = substitute(matchstr(a:docblock, '\zs\_.\{-}\ze\(@var\|@param\|@return\|$\)'), '\(^\_s*\|\_s*$\)', '', 'g') + let docblock_lines = split(a:docblock, "\n") + + let param_lines = filter(copy(docblock_lines), 'v:val =~? "^@param"') + for param_line in param_lines + let parts = matchlist(param_line, '@param\s\+\(\S\+\)\s\+\(\S\+\)\s*\(.*\)') + if len(parts) > 0 + call add(res.params, { + \ 'line': parts[0], + \ 'type': phpcomplete#GetTypeFromDocBlockParam(get(parts, 1, '')), + \ 'name': get(parts, 2, ''), + \ 'description': get(parts, 3, '')}) + endif + endfor + + let return_line = filter(copy(docblock_lines), 'v:val =~? "^@return"') + if len(return_line) > 0 + let return_parts = matchlist(return_line[0], '@return\s\+\(\S\+\)\s*\(.*\)') + let res['return'] = { + \ 'line': return_parts[0], + \ 'type': phpcomplete#GetTypeFromDocBlockParam(get(return_parts, 1, '')), + \ 'description': get(return_parts, 2, '')} + endif + + let exception_lines = filter(copy(docblock_lines), 'v:val =~? "^\\(@throws\\|@exception\\)"') + for exception_line in exception_lines + let parts = matchlist(exception_line, '^\(@throws\|@exception\)\s\+\(\S\+\)\s*\(.*\)') + if len(parts) > 0 + call add(res.throws, { + \ 'line': parts[0], + \ 'type': phpcomplete#GetTypeFromDocBlockParam(get(parts, 2, '')), + \ 'description': get(parts, 3, '')}) + endif + endfor + + let var_line = filter(copy(docblock_lines), 'v:val =~? "^@var"') + if len(var_line) > 0 + let var_parts = matchlist(var_line[0], '@var\s\+\(\S\+\)\s*\(.*\)') + let res['var'] = { + \ 'line': var_parts[0], + \ 'type': phpcomplete#GetTypeFromDocBlockParam(get(var_parts, 1, '')), + \ 'description': get(var_parts, 2, '')} + endif + + return res +endfunction " }}} -" built-in object functions {{{ -let g:php_builtin_object_functions = { -\ 'ArrayIterator::current(': 'void | mixed', -\ 'ArrayIterator::key(': 'void | mixed', -\ 'ArrayIterator::next(': 'void | void', -\ 'ArrayIterator::rewind(': 'void | void', -\ 'ArrayIterator::seek(': 'int position | void', -\ 'ArrayIterator::valid(': 'void | bool', -\ 'ArrayObject::append(': 'mixed newval | void', -\ 'ArrayObject::__construct(': 'mixed input | ArrayObject', -\ 'ArrayObject::count(': 'void | int', -\ 'ArrayObject::getIterator(': 'void | ArrayIterator', -\ 'ArrayObject::offsetExists(': 'mixed index | bool', -\ 'ArrayObject::offsetGet(': 'mixed index | bool', -\ 'ArrayObject::offsetSet(': 'mixed index, mixed newval | void', -\ 'ArrayObject::offsetUnset(': 'mixed index | void', -\ 'CachingIterator::hasNext(': 'void | bool', -\ 'CachingIterator::next(': 'void | void', -\ 'CachingIterator::rewind(': 'void | void', -\ 'CachingIterator::__toString(': 'void | string', -\ 'CachingIterator::valid(': 'void | bool', -\ 'CachingRecursiveIterator::getChildren(': 'void | CachingRecursiveIterator', -\ 'CachingRecursiveIterator::hasChildren(': 'void | bolean', -\ 'DirectoryIterator::__construct(': 'string path | DirectoryIterator', -\ 'DirectoryIterator::current(': 'void | DirectoryIterator', -\ 'DirectoryIterator::getATime(': 'void | int', -\ 'DirectoryIterator::getChildren(': 'void | RecursiveDirectoryIterator', -\ 'DirectoryIterator::getCTime(': 'void | int', -\ 'DirectoryIterator::getFilename(': 'void | string', -\ 'DirectoryIterator::getGroup(': 'void | int', -\ 'DirectoryIterator::getInode(': 'void | int', -\ 'DirectoryIterator::getMTime(': 'void | int', -\ 'DirectoryIterator::getOwner(': 'void | int', -\ 'DirectoryIterator::getPath(': 'void | string', -\ 'DirectoryIterator::getPathname(': 'void | string', -\ 'DirectoryIterator::getPerms(': 'void | int', -\ 'DirectoryIterator::getSize(': 'void | int', -\ 'DirectoryIterator::getType(': 'void | string', -\ 'DirectoryIterator::isDir(': 'void | bool', -\ 'DirectoryIterator::isDot(': 'void | bool', -\ 'DirectoryIterator::isExecutable(': 'void | bool', -\ 'DirectoryIterator::isFile(': 'void | bool', -\ 'DirectoryIterator::isLink(': 'void | bool', -\ 'DirectoryIterator::isReadable(': 'void | bool', -\ 'DirectoryIterator::isWritable(': 'void | bool', -\ 'DirectoryIterator::key(': 'void | string', -\ 'DirectoryIterator::next(': 'void | void', -\ 'DirectoryIterator::rewind(': 'void | void', -\ 'DirectoryIterator::valid(': 'void | string', -\ 'FilterIterator::current(': 'void | mixed', -\ 'FilterIterator::getInnerIterator(': 'void | Iterator', -\ 'FilterIterator::key(': 'void | mixed', -\ 'FilterIterator::next(': 'void | void', -\ 'FilterIterator::rewind(': 'void | void', -\ 'FilterIterator::valid(': 'void | bool', -\ 'LimitIterator::getPosition(': 'void | int', -\ 'LimitIterator::next(': 'void | void', -\ 'LimitIterator::rewind(': 'void | void', -\ 'LimitIterator::seek(': 'int position | void', -\ 'LimitIterator::valid(': 'void | bool', -\ 'Memcache::add(': 'string key, mixed var [, int flag [, int expire]] | bool', -\ 'Memcache::addServer(': 'string host [, int port [, bool persistent [, int weight [, int timeout [, int retry_interval]]]]] | bool', -\ 'Memcache::close(': 'void | bool', -\ 'Memcache::connect(': 'string host [, int port [, int timeout]] | bool', -\ 'Memcache::decrement(': 'string key [, int value] | int', -\ 'Memcache::delete(': 'string key [, int timeout] | bool', -\ 'Memcache::flush(': 'void | bool', -\ 'Memcache::getExtendedStats(': 'void | array', -\ 'Memcache::get(': 'string key | string', -\ 'Memcache::getStats(': 'void | array', -\ 'Memcache::getVersion(': 'void | string', -\ 'Memcache::increment(': 'string key [, int value] | int', -\ 'Memcache::pconnect(': 'string host [, int port [, int timeout]] | bool', -\ 'Memcache::replace(': 'string key, mixed var [, int flag [, int expire]] | bool', -\ 'Memcache::setCompressThreshold(': 'int threshold [, float min_savings] | bool', -\ 'Memcache::set(': 'string key, mixed var [, int flag [, int expire]] | bool', -\ 'ParentIterator::getChildren(': 'void | ParentIterator', -\ 'ParentIterator::hasChildren(': 'void | bool', -\ 'ParentIterator::next(': 'void | void', -\ 'ParentIterator::rewind(': 'void | void', -\ 'PDO::beginTransaction(': 'void | bool', -\ 'PDO::commit(': 'void | bool', -\ 'PDO::__construct(': 'string dsn [, string username [, string password [, array driver_options]]] | PDO', -\ 'PDO::errorCode(': 'void | string', -\ 'PDO::errorInfo(': 'void | array', -\ 'PDO::exec(': 'string statement | int', -\ 'PDO::getAttribute(': 'int attribute | mixed', -\ 'PDO::getAvailableDrivers(': 'void | array', -\ 'PDO::lastInsertId(': '[string name] | string', -\ 'PDO::prepare(': 'string statement [, array driver_options] | PDOStatement', -\ 'PDO::query(': 'string statement | PDOStatement', -\ 'PDO::quote(': 'string string [, int parameter_type] | string', -\ 'PDO::rollBack(': 'void | bool', -\ 'PDO::setAttribute(': 'int attribute, mixed value | bool', -\ 'PDO::sqliteCreateAggregate(': 'string function_name, callback step_func, callback finalize_func [, int num_args] | bool', -\ 'PDO::sqliteCreateFunction(': 'string function_name, callback callback [, int num_args] | bool', -\ 'PDOStatement::bindColumn(': 'mixed column, mixed &param [, int type] | bool', -\ 'PDOStatement::bindParam(': 'mixed parameter, mixed &variable [, int data_type [, int length [, mixed driver_options]]] | bool', -\ 'PDOStatement::bindValue(': 'mixed parameter, mixed value [, int data_type] | bool', -\ 'PDOStatement::closeCursor(': 'void | bool', -\ 'PDOStatement::columnCount(': 'void | int', -\ 'PDOStatement::errorCode(': 'void | string', -\ 'PDOStatement::errorInfo(': 'void | array', -\ 'PDOStatement::execute(': '[array input_parameters] | bool', -\ 'PDOStatement::fetchAll(': '[int fetch_style [, int column_index]] | array', -\ 'PDOStatement::fetchColumn(': '[int column_number] | string', -\ 'PDOStatement::fetch(': '[int fetch_style [, int cursor_orientation [, int cursor_offset]]] | mixed', -\ 'PDOStatement::fetchObject(': '[string class_name [, array ctor_args]] | mixed', -\ 'PDOStatement::getAttribute(': 'int attribute | mixed', -\ 'PDOStatement::getColumnMeta(': 'int column | mixed', -\ 'PDOStatement::nextRowset(': 'void | bool', -\ 'PDOStatement::rowCount(': 'void | int', -\ 'PDOStatement::setAttribute(': 'int attribute, mixed value | bool', -\ 'PDOStatement::setFetchMode(': 'int mode | bool', -\ 'Rar::extract(': 'string dir [, string filepath] | bool', -\ 'Rar::getAttr(': 'void | int', -\ 'Rar::getCrc(': 'void | int', -\ 'Rar::getFileTime(': 'void | string', -\ 'Rar::getHostOs(': 'void | int', -\ 'Rar::getMethod(': 'void | int', -\ 'Rar::getName(': 'void | string', -\ 'Rar::getPackedSize(': 'void | int', -\ 'Rar::getUnpackedSize(': 'void | int', -\ 'Rar::getVersion(': 'void | int', -\ 'RecursiveDirectoryIterator::getChildren(': 'void | object', -\ 'RecursiveDirectoryIterator::hasChildren(': '[bool allow_links] | bool', -\ 'RecursiveDirectoryIterator::key(': 'void | string', -\ 'RecursiveDirectoryIterator::next(': 'void | void', -\ 'RecursiveDirectoryIterator::rewind(': 'void | void', -\ 'RecursiveIteratorIterator::current(': 'void | mixed', -\ 'RecursiveIteratorIterator::getDepth(': 'void | int', -\ 'RecursiveIteratorIterator::getSubIterator(': 'void | RecursiveIterator', -\ 'RecursiveIteratorIterator::key(': 'void | mixed', -\ 'RecursiveIteratorIterator::next(': 'void | void', -\ 'RecursiveIteratorIterator::rewind(': 'void | void', -\ 'RecursiveIteratorIterator::valid(': 'void | bolean', -\ 'SDO_DAS_ChangeSummary::beginLogging(': 'void | void', -\ 'SDO_DAS_ChangeSummary::endLogging(': 'void | void', -\ 'SDO_DAS_ChangeSummary::getChangedDataObjects(': 'void | SDO_List', -\ 'SDO_DAS_ChangeSummary::getChangeType(': 'SDO_DataObject dataObject | int', -\ 'SDO_DAS_ChangeSummary::getOldContainer(': 'SDO_DataObject data_object | SDO_DataObject', -\ 'SDO_DAS_ChangeSummary::getOldValues(': 'SDO_DataObject data_object | SDO_List', -\ 'SDO_DAS_ChangeSummary::isLogging(': 'void | bool', -\ 'SDO_DAS_DataFactory::addPropertyToType(': 'string parent_type_namespace_uri, string parent_type_name, string property_name, string type_namespace_uri, string type_name [, array options] | void', -\ 'SDO_DAS_DataFactory::addType(': 'string type_namespace_uri, string type_name [, array options] | void', -\ 'SDO_DAS_DataFactory::getDataFactory(': 'void | SDO_DAS_DataFactory', -\ 'SDO_DAS_DataObject::getChangeSummary(': 'void | SDO_DAS_ChangeSummary', -\ 'SDO_DAS_Relational::applyChanges(': 'PDO database_handle, SDODataObject root_data_object | void', -\ 'SDO_DAS_Relational::__construct(': 'array database_metadata [, string application_root_type [, array SDO_containment_references_metadata]] | SDO_DAS_Relational', -\ 'SDO_DAS_Relational::createRootDataObject(': 'void | SDODataObject', -\ 'SDO_DAS_Relational::executePreparedQuery(': 'PDO database_handle, PDOStatement prepared_statement, array value_list [, array column_specifier] | SDODataObject', -\ 'SDO_DAS_Relational::executeQuery(': 'PDO database_handle, string SQL_statement [, array column_specifier] | SDODataObject', -\ 'SDO_DAS_Setting::getListIndex(': 'void | int', -\ 'SDO_DAS_Setting::getPropertyIndex(': 'void | int', -\ 'SDO_DAS_Setting::getPropertyName(': 'void | string', -\ 'SDO_DAS_Setting::getValue(': 'void | mixed', -\ 'SDO_DAS_Setting::isSet(': 'void | bool', -\ 'SDO_DAS_XML::addTypes(': 'string xsd_file | void', -\ 'SDO_DAS_XML::createDataObject(': 'string namespace_uri, string type_name | SDO_DataObject', -\ 'SDO_DAS_XML::createDocument(': '[string document_element_name] | SDO_DAS_XML_Document', -\ 'SDO_DAS_XML::create(': '[string xsd_file] | SDO_DAS_XML', -\ 'SDO_DAS_XML_Document::getRootDataObject(': 'void | SDO_DataObject', -\ 'SDO_DAS_XML_Document::getRootElementName(': 'void | string', -\ 'SDO_DAS_XML_Document::getRootElementURI(': 'void | string', -\ 'SDO_DAS_XML_Document::setEncoding(': 'string encoding | void', -\ 'SDO_DAS_XML_Document::setXMLDeclaration(': 'bool xmlDeclatation | void', -\ 'SDO_DAS_XML_Document::setXMLVersion(': 'string xmlVersion | void', -\ 'SDO_DAS_XML::loadFile(': 'string xml_file | SDO_XMLDocument', -\ 'SDO_DAS_XML::loadString(': 'string xml_string | SDO_DAS_XML_Document', -\ 'SDO_DAS_XML::saveFile(': 'SDO_XMLDocument xdoc, string xml_file [, int indent] | void', -\ 'SDO_DAS_XML::saveString(': 'SDO_XMLDocument xdoc [, int indent] | string', -\ 'SDO_DataFactory::create(': 'string type_namespace_uri, string type_name | void', -\ 'SDO_DataObject::clear(': 'void | void', -\ 'SDO_DataObject::createDataObject(': 'mixed identifier | SDO_DataObject', -\ 'SDO_DataObject::getContainer(': 'void | SDO_DataObject', -\ 'SDO_DataObject::getSequence(': 'void | SDO_Sequence', -\ 'SDO_DataObject::getTypeName(': 'void | string', -\ 'SDO_DataObject::getTypeNamespaceURI(': 'void | string', -\ 'SDO_Exception::getCause(': 'void | mixed', -\ 'SDO_List::insert(': 'mixed value [, int index] | void', -\ 'SDO_Model_Property::getContainingType(': 'void | SDO_Model_Type', -\ 'SDO_Model_Property::getDefault(': 'void | mixed', -\ 'SDO_Model_Property::getName(': 'void | string', -\ 'SDO_Model_Property::getType(': 'void | SDO_Model_Type', -\ 'SDO_Model_Property::isContainment(': 'void | bool', -\ 'SDO_Model_Property::isMany(': 'void | bool', -\ 'SDO_Model_ReflectionDataObject::__construct(': 'SDO_DataObject data_object | SDO_Model_ReflectionDataObject', -\ 'SDO_Model_ReflectionDataObject::export(': 'SDO_Model_ReflectionDataObject rdo [, bool return] | mixed', -\ 'SDO_Model_ReflectionDataObject::getContainmentProperty(': 'void | SDO_Model_Property', -\ 'SDO_Model_ReflectionDataObject::getInstanceProperties(': 'void | array', -\ 'SDO_Model_ReflectionDataObject::getType(': 'void | SDO_Model_Type', -\ 'SDO_Model_Type::getBaseType(': 'void | SDO_Model_Type', -\ 'SDO_Model_Type::getName(': 'void | string', -\ 'SDO_Model_Type::getNamespaceURI(': 'void | string', -\ 'SDO_Model_Type::getProperties(': 'void | array', -\ 'SDO_Model_Type::getProperty(': 'mixed identifier | SDO_Model_Property', -\ 'SDO_Model_Type::isAbstractType(': 'void | bool', -\ 'SDO_Model_Type::isDataType(': 'void | bool', -\ 'SDO_Model_Type::isInstance(': 'SDO_DataObject data_object | bool', -\ 'SDO_Model_Type::isOpenType(': 'void | bool', -\ 'SDO_Model_Type::isSequencedType(': 'void | bool', -\ 'SDO_Sequence::getProperty(': 'int sequence_index | SDO_Model_Property', -\ 'SDO_Sequence::insert(': 'mixed value [, int sequenceIndex [, mixed propertyIdentifier]] | void', -\ 'SDO_Sequence::move(': 'int toIndex, int fromIndex | void', -\ 'SimpleXMLIterator::current(': 'void | mixed', -\ 'SimpleXMLIterator::getChildren(': 'void | object', -\ 'SimpleXMLIterator::hasChildren(': 'void | bool', -\ 'SimpleXMLIterator::key(': 'void | mixed', -\ 'SimpleXMLIterator::next(': 'void | void', -\ 'SimpleXMLIterator::rewind(': 'void | void', -\ 'SimpleXMLIterator::valid(': 'void | bool', -\ 'SWFButton::addASound(': 'SWFSound sound, int flags | SWFSoundInstance', -\ 'SWFButton::setMenu(': 'int flag | void', -\ 'SWFDisplayItem::addAction(': 'SWFAction action, int flags | void', -\ 'SWFDisplayItem::endMask(': 'void | void', -\ 'SWFDisplayItem::getRot(': 'void | float', -\ 'SWFDisplayItem::getX(': 'void | float', -\ 'SWFDisplayItem::getXScale(': 'void | float', -\ 'SWFDisplayItem::getXSkew(': 'void | float', -\ 'SWFDisplayItem::getY(': 'void | float', -\ 'SWFDisplayItem::getYScale(': 'void | float', -\ 'SWFDisplayItem::getYSkew(': 'void | float', -\ 'SWFDisplayItem::setMaskLevel(': 'int level | void', -\ 'SWFDisplayItem::setMatrix(': 'float a, float b, float c, float d, float x, float y | void', -\ 'SWFFontChar::addChars(': 'string char | void', -\ 'SWFFontChar::addUTF8Chars(': 'string char | void', -\ 'SWFFont::getAscent(': 'void | float', -\ 'SWFFont::getDescent(': 'void | float', -\ 'SWFFont::getLeading(': 'void | float', -\ 'SWFFont::getShape(': 'int code | string', -\ 'SWFFont::getUTF8Width(': 'string string | float', -\ 'SWFMovie::addExport(': 'SWFCharacter char, string name | void', -\ 'SWFMovie::addFont(': 'SWFFont font | SWFFontChar', -\ 'SWFMovie::importChar(': 'string libswf, string name | SWFSprite', -\ 'SWFMovie::importFont(': 'string libswf, string name | SWFFontChar', -\ 'SWFMovie::labelFrame(': 'string label | void', -\ 'SWFMovie::saveToFile(': 'stream x [, int compression] | int', -\ 'SWFMovie::startSound(': 'SWFSound sound | SWFSoundInstance', -\ 'SWFMovie::stopSound(': 'SWFSound sound | void', -\ 'SWFMovie::writeExports(': 'void | void', -\ 'SWFShape::drawArc(': 'float r, float startAngle, float endAngle | void', -\ 'SWFShape::drawCircle(': 'float r | void', -\ 'SWFShape::drawCubic(': 'float bx, float by, float cx, float cy, float dx, float dy | int', -\ 'SWFShape::drawCubicTo(': 'float bx, float by, float cx, float cy, float dx, float dy | int', -\ 'SWFShape::drawGlyph(': 'SWFFont font, string character [, int size] | void', -\ 'SWFSoundInstance::loopCount(': 'int point | void', -\ 'SWFSoundInstance::loopInPoint(': 'int point | void', -\ 'SWFSoundInstance::loopOutPoint(': 'int point | void', -\ 'SWFSoundInstance::noMultiple(': 'void | void', -\ 'SWFSprite::labelFrame(': 'string label | void', -\ 'SWFSprite::startSound(': 'SWFSound sound | SWFSoundInstance', -\ 'SWFSprite::stopSound(': 'SWFSound sound | void', -\ 'SWFText::addUTF8String(': 'string text | void', -\ 'SWFTextField::addChars(': 'string chars | void', -\ 'SWFTextField::setPadding(': 'float padding | void', -\ 'SWFText::getAscent(': 'void | float', -\ 'SWFText::getDescent(': 'void | float', -\ 'SWFText::getLeading(': 'void | float', -\ 'SWFText::getUTF8Width(': 'string string | float', -\ 'SWFVideoStream::getNumFrames(': 'void | int', -\ 'SWFVideoStream::setDimension(': 'int x, int y | void', -\ 'tidy::__construct(': '[string filename [, mixed config [, string encoding [, bool use_include_path]]]] | tidy' -\ } - " }}} + +function! phpcomplete#GetTypeFromDocBlockParam(docblock_type) " {{{ + if a:docblock_type !~ '|' + return a:docblock_type + endif + + let primitive_types = [ + \ 'string', 'float', 'double', 'int', + \ 'scalar', 'array', 'bool', 'void', 'mixed', + \ 'null', 'callable', 'resource', 'object'] + + " add array of primitives to the list too, like string[] + let primitive_types += map(copy(primitive_types), 'v:val."[]"') + let types = split(a:docblock_type, '|') + for type in types + if index(primitive_types, type) == -1 + return type + endif + endfor + + " only primitive types found, return the first one + return types[0] + +endfunction +" }}} + +function! phpcomplete#FormatDocBlock(info) " {{{ + let res = '' + if len(a:info.description) + let res .= "Description:\n".join(map(split(a:info['description'], "\n"), '"\t".v:val'), "\n")."\n" + endif + + if len(a:info.params) + let res .= "\nArguments:\n" + for arginfo in a:info.params + let res .= "\t".arginfo['name'].' '.arginfo['type'] + if len(arginfo.description) > 0 + let res .= ': '.arginfo['description'] + endif + let res .= "\n" + endfor + endif + + if has_key(a:info.return, 'type') + let res .= "\nReturn:\n\t".a:info['return']['type'] + if len(a:info.return.description) > 0 + let res .= ": ".a:info['return']['description'] + endif + let res .= "\n" + endif + + if len(a:info.throws) + let res .= "\nThrows:\n" + for excinfo in a:info.throws + let res .= "\t".excinfo['type'] + if len(excinfo['description']) > 0 + let res .= ": ".excinfo['description'] + endif + let res .= "\n" + endfor + endif + + if has_key(a:info.var, 'type') + let res .= "Type:\n\t".a:info['var']['type']."\n" + if len(a:info['var']['description']) > 0 + let res .= ': '.a:info['var']['description'] + endif + endif + + return res +endfunction! +" }}} + +function! phpcomplete#GetCurrentNameSpace(file_lines) " {{{ + let namespace_name_pattern = '[a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*' + let file_lines = reverse(copy(a:file_lines)) + let i = 0 + let file_length = len(file_lines) + let imports = {} + + let current_namespace = '\' + + while i < file_length + let line = file_lines[i] + + if line =~? '^\s*namespace\s*'.namespace_name_pattern + let current_namespace = matchstr(line, '^\s*namespace\s*\zs'.namespace_name_pattern.'\ze') + break + endif + + if line =~? '^\s*use\>' + if line =~? ';' + let use_line = line + else + " try to find the next line containing ';' + let l = i + let search_line = line + let use_line = line + + " add lines from the file until theres no ';' in them + while search_line !~? ';' && l > 0 + " file lines are reversed so we need to go backwards + let l -= 1 + let search_line = file_lines[l] + let use_line .= ' '.substitute(search_line, '\(^\s\+\|\s\+$\)', '', 'g') + endwhile + endif + let use_expression = matchstr(use_line, '^\s*use\s\+\zs.\{-}\ze;') + let use_parts = map(split(use_expression, '\s*,\s*'), 'substitute(v:val, "\\s+", " ", "g")') + for part in use_parts + if part =~? '\s\+as\s\+' + let [object, name] = split(part, '\s\+as\s\+') + let object = substitute(object, '^\\', '', '') + let name = substitute(name, '^\\', '', '') + else + let object = part + let name = part + let object = substitute(object, '^\\', '', '') + let name = substitute(name, '^\\', '', '') + if name =~? '\\' + let name = matchstr(name, '\\\zs[^\\]\+\ze$') + endif + endif + " leading slash is not required use imports are always absolute + let imports[name] = {'name': object, 'kind': ''} + endfor + + " find kind flags from tags or built in methods for the objects we extracted + " they can be either classes, interfaces or namespaces, no other thing is importable in php + for [key, import] in items(imports) + " if theres a \ in the name we have it's definetly not a built in thing, look for tags + if import.name =~ '\\' + let patched_ctags_detected = 0 + let [classname, namespace_for_classes] = phpcomplete#ExpandClassName(import.name, '\', {}) + let namespace_name_candidate = substitute(import.name, '\\', '\\\\', 'g') + " can be a namespace name as is, or can be a tagname at the end with a namespace + let tags = phpcomplete#GetTaglist('^\('.namespace_name_candidate.'\|'.classname.'\)$') + if len(tags) > 0 + for tag in tags + " if there's a namespace with the name of the import + if tag.kind == 'n' && tag.name == import.name + call extend(import, tag) + let import['builtin'] = 0 + let patched_ctags_detected = 1 + break + endif + " if the name matches with the extracted classname and namespace + if (tag.kind == 'c' || tag.kind == 'i') && tag.name == classname + if has_key(tag, 'namespace') + let patched_ctags_detected = 1 + if tag.namespace == namespace_for_classes + call extend(import, tag) + let import['builtin'] = 0 + break + endif + elseif !exists('no_namespace_candidate') + " save the first namespacless match to be used if no better + " candidate found later on + let no_namespace_candidate = tag + endif + endif + endfor + " there were a namespacless class name match, if we think that the + " tags are not generated with patched ctags we will take it as a match + if exists('no_namespace_candidate') && !patched_ctags_detected + call extend(import, no_namespace_candidate) + let import['builtin'] = 0 + endif + else + " if no tags are found, extract the namespace from the name + let ns = matchstr(import.name, '\c\zs[a-zA-Z0-9\\]\+\ze\\' . name) + if len(ns) > 0 + let import['name'] = name + let import['namespace'] = ns + let import['builtin'] = 0 + endif + endif + else + " if no \ in the name, it can be a built in class + if has_key(g:php_builtin_classnames, tolower(import.name)) + let import['kind'] = 'c' + let import['builtin'] = 1 + elseif has_key(g:php_builtin_interfaces, import.name) + let import['kind'] = 'i' + let import['builtin'] = 1 + else + " or can be a tag with exactly matchign name + let tags = phpcomplete#GetTaglist('^'.import['name'].'$') + for tag in tags + " search for the first matchin namespace, class, interface with no namespace + if !has_key(tag, 'namespace') && (tag.kind == 'n' || tag.kind == 'c' || tag.kind == 'i') + call extend(import, tag) + let import['builtin'] = 0 + break + endif + endfor + endif + endif + endfor + endif + let i += 1 + endwhile + let sorted_imports = {} + for name in sort(keys(imports)) + let sorted_imports[name] = imports[name] + endfor + return [current_namespace, sorted_imports] +endfunction +" }}} + +function! phpcomplete#ExpandClassName(classname, current_namespace, imports) " {{{ + " if there's an imported class, just use that class's information + if has_key(a:imports, a:classname) && (a:imports[a:classname].kind == 'c' || a:imports[a:classname].kind == 'i') + let namespace = has_key(a:imports[a:classname], 'namespace') ? a:imports[a:classname].namespace : '' + return [a:imports[a:classname].name, namespace] + endif + + " try to find relative namespace in imports, imported names takes precedence over + " current namespace when resolving relative namespaced class names + if a:classname !~ '^\' && a:classname =~ '\\' + let classname_parts = split(a:classname, '\\\+') + if has_key(a:imports, classname_parts[0]) && a:imports[classname_parts[0]].kind == 'n' + let classname_parts[0] = a:imports[classname_parts[0]].name + let namespace = join(classname_parts[0:-2], '\') + let classname = classname_parts[-1] + return [classname, namespace] + endif + endif + + " no imported class or namespace matched, expand with the current namespace + let namespace = '' + let classname = a:classname + " if the classname have namespaces in in or we are in a namespace + if a:classname =~ '\\' || (a:current_namespace != '\' && a:current_namespace != '') + " add current namespace to the a:classname + if a:classname !~ '^\' + let classname = a:current_namespace.'\'.substitute(a:classname, '^\\', '', '') + else + " remove leading \, tag files doesn't have those + let classname = substitute(a:classname, '^\\', '', '') + endif + " split classname to classname and namespace + let classname_parts = split(classname, '\\\+') + if len(classname_parts) > 1 + let namespace = join(classname_parts[0:-2], '\') + let classname = classname_parts[-1] + endif + endif + return [classname, namespace] +endfunction +" }}} + +function! phpcomplete#LoadData() " {{{ +" Keywords/reserved words, all other special things +" Later it is possible to add some help to values, or type of defined variable +let g:php_keywords={'PHP_SELF':'','argv':'','argc':'','GATEWAY_INTERFACE':'','SERVER_ADDR':'','SERVER_NAME':'','SERVER_SOFTWARE':'','SERVER_PROTOCOL':'','REQUEST_METHOD':'','REQUEST_TIME':'','QUERY_STRING':'','DOCUMENT_ROOT':'','HTTP_ACCEPT':'','HTTP_ACCEPT_CHARSET':'','HTTP_ACCEPT_ENCODING':'','HTTP_ACCEPT_LANGUAGE':'','HTTP_CONNECTION':'','HTTP_POST':'','HTTP_REFERER':'','HTTP_USER_AGENT':'','HTTPS':'','REMOTE_ADDR':'','REMOTE_HOST':'','REMOTE_PORT':'','SCRIPT_FILENAME':'','SERVER_ADMIN':'','SERVER_PORT':'','SERVER_SIGNATURE':'','PATH_TRANSLATED':'','SCRIPT_NAME':'','REQUEST_URI':'','PHP_AUTH_DIGEST':'','PHP_AUTH_USER':'','PHP_AUTH_PW':'','AUTH_TYPE':'','and':'','or':'','xor':'','__FILE__':'','exception':'','__LINE__':'','as':'','break':'','case':'','class':'','const':'','continue':'','declare':'','default':'','do':'','echo':'','else':'','elseif':'','enddeclare':'','endfor':'','endforeach':'','endif':'','endswitch':'','endwhile':'','extends':'','for':'','foreach':'','function':'','global':'','if':'','new':'','static':'','switch':'','use':'','var':'','while':'','final':'','php_user_filter':'','interface':'','implements':'','public':'','private':'','protected':'','abstract':'','clone':'','try':'','catch':'','throw':'','cfunction':'','old_function':'','this':'','INI_USER': '','INI_PERDIR': '','INI_SYSTEM': '','INI_ALL': '','ABDAY_1': '','ABDAY_2': '','ABDAY_3': '','ABDAY_4': '','ABDAY_5': '','ABDAY_6': '','ABDAY_7': '','DAY_1': '','DAY_2': '','DAY_3': '','DAY_4': '','DAY_5': '','DAY_6': '','DAY_7': '','ABMON_1': '','ABMON_2': '','ABMON_3': '','ABMON_4': '','ABMON_5': '','ABMON_6': '','ABMON_7': '','ABMON_8': '','ABMON_9': '','ABMON_10': '','ABMON_11': '','ABMON_12': '','MON_1': '','MON_2': '','MON_3': '','MON_4': '','MON_5': '','MON_6': '','MON_7': '','MON_8': '','MON_9': '','MON_10': '','MON_11': '','MON_12': '','AM_STR': '','D_T_FMT': '','ALT_DIGITS': '',} +" One giant hash of all built-in function, class, interface and constant grouped by extension +let php_builtin = {'functions':{},'classes':{},'interfaces':{},'constants':{},} +let php_builtin['functions']['math']={'abs(':'mixed $number | number','acos(':'float $arg | float','acosh(':'float $arg | float','asin(':'float $arg | float','asinh(':'float $arg | float','atan(':'float $arg | float','atan2(':'float $y, float $x | float','atanh(':'float $arg | float','base_convert(':'string $number, int $frombase, int $tobase | string','bindec(':'string $binary_string | number','ceil(':'float $value | float','cos(':'float $arg | float','cosh(':'float $arg | float','decbin(':'int $number | string','dechex(':'int $number | string','decoct(':'int $number | string','deg2rad(':'float $number | float','exp(':'float $arg | float','expm1(':'float $arg | float','floor(':'float $value | float','fmod(':'float $x, float $y | float','getrandmax(':'void | int','hexdec(':'string $hex_string | number','hypot(':'float $x, float $y | float','is_finite(':'float $val | bool','is_infinite(':'float $val | bool','is_nan(':'float $val | bool','lcg_value(':'void | float','log(':'float $arg [, float $base = M_E] | float','log10(':'float $arg | float','log1p(':'float $number | float','max(':'array $values | mixed','min(':'array $values | mixed','mt_getrandmax(':'void | int','mt_rand(':'void | int','mt_srand(':'[ int $seed] | void','octdec(':'string $octal_string | number','pi(':'void | float','pow(':'number $base, number $exp | number','rad2deg(':'float $number | float','rand(':'void | int','round(':'float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP]] | float','sin(':'float $arg | float','sinh(':'float $arg | float','sqrt(':'float $arg | float','srand(':'[ int $seed] | void','tan(':'float $arg | float','tanh(':'float $arg | float',} +let php_builtin['functions']['strings']={'addcslashes(':'string $str, string $charlist | string','addslashes(':'string $str | string','bin2hex(':'string $str | string','chop(':'chop — Alias of rtrim()','chr(':'int $ascii | string','chunk_split(':'string $body [, int $chunklen = 76 [, string $end = "\r\n"]] | string','convert_cyr_string(':'string $str, string $from, string $to | string','convert_uudecode(':'string $data | string','convert_uuencode(':'string $data | string','count_chars(':'string $string [, int $mode = 0] | mixed','crc32(':'string $str | int','crypt(':'string $str [, string $salt] | string','echo(':'string $arg1 [, string $...] | void','explode(':'string $delimiter, string $string [, int $limit] | array','fprintf(':'resource $handle, string $format [, mixed $args [, mixed $...]] | int','get_html_translation_table(':'[ int $table = HTML_SPECIALCHARS [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ''UTF-8'']]] | array','hebrev(':'string $hebrew_text [, int $max_chars_per_line = 0] | string','hebrevc(':'string $hebrew_text [, int $max_chars_per_line = 0] | string','hex2bin(':'string $data | string','html_entity_decode(':'string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ''UTF-8'']] | string','htmlentities(':'string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ''UTF-8'' [, bool $double_encode = true]]] | string','htmlspecialchars_decode(':'string $string [, int $flags = ENT_COMPAT | ENT_HTML401] | string','htmlspecialchars(':'string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ''UTF-8'' [, bool $double_encode = true]]] | string','implode(':'string $glue, array $pieces | string','join(':'join — Alias of implode()','lcfirst(':'string $str | string','levenshtein(':'string $str1, string $str2 | int','localeconv(':'void | array','ltrim(':'string $str [, string $character_mask] | string','md5_file(':'string $filename [, bool $raw_output = false] | string','md5(':'string $str [, bool $raw_output = false] | string','metaphone(':'string $str [, int $phonemes = 0] | string','money_format(':'string $format, float $number | string','nl_langinfo(':'int $item | string','nl2br(':'string $string [, bool $is_xhtml = true] | string','number_format(':'float $number [, int $decimals = 0] | string','ord(':'string $string | int','parse_str(':'string $str [, array &$arr] | void','print(':'string $arg | int','printf(':'string $format [, mixed $args [, mixed $...]] | int','quoted_printable_decode(':'string $str | string','quoted_printable_encode(':'string $str | string','quotemeta(':'string $str | string','rtrim(':'string $str [, string $character_mask] | string','setlocale(':'int $category, string $locale [, string $...] | string','sha1_file(':'string $filename [, bool $raw_output = false] | string','sha1(':'string $str [, bool $raw_output = false] | string','similar_text(':'string $first, string $second [, float &$percent] | int','soundex(':'string $str | string','sprintf(':'string $format [, mixed $args [, mixed $...]] | string','sscanf(':'string $str, string $format [, mixed &$...] | mixed','str_getcsv(':'string $input [, string $delimiter = '','' [, string $enclosure = ''"'' [, string $escape = ''\\'']]] | array','str_ireplace(':'mixed $search, mixed $replace, mixed $subject [, int &$count] | mixed','str_pad(':'string $input, int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT]] | string','str_repeat(':'string $input, int $multiplier | string','str_replace(':'mixed $search, mixed $replace, mixed $subject [, int &$count] | mixed','str_rot13(':'string $str | string','str_shuffle(':'string $str | string','str_split(':'string $string [, int $split_length = 1] | array','str_word_count(':'string $string [, int $format = 0 [, string $charlist]] | mixed','strcasecmp(':'string $str1, string $str2 | int','strchr(':'strchr — Alias of strstr()','strcmp(':'string $str1, string $str2 | int','strcoll(':'string $str1, string $str2 | int','strcspn(':'string $str1, string $str2 [, int $start [, int $length]] | int','strip_tags(':'string $str [, string $allowable_tags] | string','stripcslashes(':'string $str | string','stripos(':'string $haystack, string $needle [, int $offset = 0] | int','stripslashes(':'string $str | string','stristr(':'string $haystack, mixed $needle [, bool $before_needle = false] | string','strlen(':'string $string | int','strnatcasecmp(':'string $str1, string $str2 | int','strnatcmp(':'string $str1, string $str2 | int','strncasecmp(':'string $str1, string $str2, int $len | int','strncmp(':'string $str1, string $str2, int $len | int','strpbrk(':'string $haystack, string $char_list | string','strpos(':'string $haystack, mixed $needle [, int $offset = 0] | mixed','strrchr(':'string $haystack, mixed $needle | string','strrev(':'string $string | string','strripos(':'string $haystack, string $needle [, int $offset = 0] | int','strrpos(':'string $haystack, string $needle [, int $offset = 0] | int','strspn(':'string $subject, string $mask [, int $start [, int $length]] | int','strstr(':'string $haystack, mixed $needle [, bool $before_needle = false] | string','strtok(':'string $str, string $token | string','strtolower(':'string $str | string','strtoupper(':'string $string | string','strtr(':'string $str, string $from, string $to | string','substr_compare(':'string $main_str, string $str, int $offset [, int $length [, bool $case_insensitivity = false]] | int','substr_count(':'string $haystack, string $needle [, int $offset = 0 [, int $length]] | int','substr_replace(':'mixed $string, mixed $replacement, mixed $start [, mixed $length] | mixed','substr(':'string $string, int $start [, int $length] | string','trim(':'string $str [, string $character_mask = " \t\n\r\0\x0B"] | string','ucfirst(':'string $str | string','ucwords(':'string $str | string','vfprintf(':'resource $handle, string $format, array $args | int','vprintf(':'string $format, array $args | int','vsprintf(':'string $format, array $args | string','wordwrap(':'string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = false]]] | string',} +let php_builtin['functions']['apache']={'apache_child_terminate(':'void | bool','apache_get_modules(':'void | array','apache_get_version(':'void | string','apache_getenv(':'string $variable [, bool $walk_to_top = false] | string','apache_lookup_uri(':'string $filename | object','apache_note(':'string $note_name [, string $note_value = ""] | string','apache_request_headers(':'void | array','apache_reset_timeout(':'void | bool','apache_response_headers(':'void | array','apache_setenv(':'string $variable, string $value [, bool $walk_to_top = false] | bool','getallheaders(':'void | array','virtual(':'string $filename | bool',} +let php_builtin['functions']['arrays']={'array_change_key_case(':'array $array [, int $case = CASE_LOWER] | array','array_chunk(':'array $array, int $size [, bool $preserve_keys = false] | array','array_column(':'array $array, mixed $column_key [, mixed $index_key = null] | array','array_combine(':'array $keys, array $values | array','array_count_values(':'array $array | array','array_diff_assoc(':'array $array1, array $array2 [, array $...] | array','array_diff_key(':'array $array1, array $array2 [, array $...] | array','array_diff_uassoc(':'array $array1, array $array2 [, array $... [, callable $key_compare_func]] | array','array_diff_ukey(':'array $array1, array $array2 [, array $... [, callable $key_compare_func]] | array','array_diff(':'array $array1, array $array2 [, array $...] | array','array_fill_keys(':'array $keys, mixed $value | array','array_fill(':'int $start_index, int $num, mixed $value | array','array_filter(':'array $array [, callable $callback] | array','array_flip(':'array $array | array','array_intersect_assoc(':'array $array1, array $array2 [, array $...] | array','array_intersect_key(':'array $array1, array $array2 [, array $...] | array','array_intersect_uassoc(':'array $array1, array $array2 [, array $... [, callable $key_compare_func]] | array','array_intersect_ukey(':'array $array1, array $array2 [, array $... [, callable $key_compare_func]] | array','array_intersect(':'array $array1, array $array2 [, array $...] | array','array_key_exists(':'mixed $key, array $array | bool','array_keys(':'array $array [, mixed $search_value [, bool $strict = false]] | array','array_map(':'callable $callback, array $array1 [, array $...] | array','array_merge_recursive(':'array $array1 [, array $...] | array','array_merge(':'array $array1 [, array $...] | array','array_multisort(':'array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $...]]] | bool','array_pad(':'array $array, int $size, mixed $value | array','array_pop(':'array &$array | mixed','array_product(':'array $array | number','array_push(':'array &$array, mixed $value1 [, mixed $...] | int','array_rand(':'array $array [, int $num = 1] | mixed','array_reduce(':'array $array, callable $callback [, mixed $initial = NULL] | mixed','array_replace_recursive(':'array $array1, array $array2 [, array $...] | array','array_replace(':'array $array1, array $array2 [, array $...] | array','array_reverse(':'array $array [, bool $preserve_keys = false] | array','array_search(':'mixed $needle, array $haystack [, bool $strict = false] | mixed','array_shift(':'array &$array | mixed','array_slice(':'array $array, int $offset [, int $length = NULL [, bool $preserve_keys = false]] | array','array_splice(':'array &$input, int $offset [, int $length [, mixed $replacement = array()]] | array','array_sum(':'array $array | number','array_udiff_assoc(':'array $array1, array $array2 [, array $... [, callable $value_compare_func]] | array','array_udiff_uassoc(':'array $array1, array $array2 [, array $... [, callable $value_compare_func [, callable $key_compare_func]]] | array','array_udiff(':'array $array1, array $array2 [, array $... [, callable $value_compare_func]] | array','array_uintersect_assoc(':'array $array1, array $array2 [, array $... [, callable $value_compare_func]] | array','array_uintersect_uassoc(':'array $array1, array $array2 [, array $... [, callable $value_compare_func [, callable $key_compare_func]]] | array','array_uintersect(':'array $array1, array $array2 [, array $... [, callable $value_compare_func]] | array','array_unique(':'array $array [, int $sort_flags = SORT_STRING] | array','array_unshift(':'array &$array, mixed $value1 [, mixed $...] | int','array_values(':'array $array | array','array_walk_recursive(':'array &$array, callable $callback [, mixed $userdata = NULL] | bool','array_walk(':'array &$array, callable $callback [, mixed $userdata = NULL] | bool','array(':'[ mixed $...] | array','arsort(':'array &$array [, int $sort_flags = SORT_REGULAR] | bool','asort(':'array &$array [, int $sort_flags = SORT_REGULAR] | bool','compact(':'mixed $varname1 [, mixed $...] | array','count(':'mixed $array_or_countable [, int $mode = COUNT_NORMAL] | int','current(':'array &$array | mixed','each(':'array &$array | array','end(':'array &$array | mixed','extract(':'array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL]] | int','in_array(':'mixed $needle, array $haystack [, bool $strict = FALSE] | bool','key_exists(':'key_exists — Alias of array_key_exists()','key(':'array &$array | mixed','krsort(':'array &$array [, int $sort_flags = SORT_REGULAR] | bool','ksort(':'array &$array [, int $sort_flags = SORT_REGULAR] | bool','list(':'mixed $var1 [, mixed $...] | array','natcasesort(':'array &$array | bool','natsort(':'array &$array | bool','next(':'array &$array | mixed','pos(':'pos — Alias of current()','prev(':'array &$array | mixed','range(':'mixed $start, mixed $end [, number $step = 1] | array','reset(':'array &$array | mixed','rsort(':'array &$array [, int $sort_flags = SORT_REGULAR] | bool','shuffle(':'array &$array | bool','sizeof(':'sizeof — Alias of count()','sort(':'array &$array [, int $sort_flags = SORT_REGULAR] | bool','uasort(':'array &$array, callable $value_compare_func | bool','uksort(':'array &$array, callable $key_compare_func | bool','usort(':'array &$array, callable $value_compare_func | bool',} +let php_builtin['functions']['php_options_info']={'assert_options(':'int $what [, mixed $value] | mixed','assert(':'mixed $assertion [, string $description] | bool','cli_get_process_title(':'void | string','cli_set_process_title(':'string $title | bool','dl(':'string $library | bool','extension_loaded(':'string $name | bool','gc_collect_cycles(':'void | int','gc_disable(':'void | void','gc_enable(':'void | void','gc_enabled(':'void | bool','get_cfg_var(':'string $option | string','get_current_user(':'void | string','get_defined_constants(':'[ bool $categorize = false] | array','get_extension_funcs(':'string $module_name | array','get_include_path(':'void | string','get_included_files(':'void | array','get_loaded_extensions(':'[ bool $zend_extensions = false] | array','get_magic_quotes_gpc(':'void | bool','get_magic_quotes_runtime(':'void | bool','get_required_files(':'get_required_files — Alias of get_included_files()','getenv(':'string $varname | string','getlastmod(':'void | int','getmygid(':'void | int','getmyinode(':'void | int','getmypid(':'void | int','getmyuid(':'void | int','getopt(':'string $options [, array $longopts] | array','getrusage(':'[ int $who = 0] | array','ini_alter(':'ini_alter — Alias of ini_set()','ini_get_all(':'[ string $extension [, bool $details = true]] | array','ini_get(':'string $varname | string','ini_restore(':'string $varname | void','ini_set(':'string $varname, string $newvalue | string','magic_quotes_runtime(':'magic_quotes_runtime — Alias of set_magic_quotes_runtime()','memory_get_peak_usage(':'[ bool $real_usage = false] | int','memory_get_usage(':'[ bool $real_usage = false] | int','php_ini_loaded_file(':'void | string','php_ini_scanned_files(':'void | string','php_logo_guid(':'void | string','php_sapi_name(':'void | string','php_uname(':'[ string $mode = "a"] | string','phpcredits(':'[ int $flag = CREDITS_ALL] | bool','phpinfo(':'[ int $what = INFO_ALL] | bool','phpversion(':'[ string $extension] | string','putenv(':'string $setting | bool','restore_include_path(':'void | void','set_include_path(':'string $new_include_path | string','set_magic_quotes_runtime(':'bool $new_setting | bool','set_time_limit(':'int $seconds | void','sys_get_temp_dir(':'void | string','version_compare(':'string $version1, string $version2 [, string $operator] | mixed','zend_logo_guid(':'void | string','zend_thread_id(':'void | int','zend_version(':'void | string',} +let php_builtin['functions']['classes_objects']={'__autoload(':'string $class | void','call_user_method_array(':'string $method_name, object &$obj, array $params | mixed','call_user_method(':'string $method_name, object &$obj [, mixed $parameter [, mixed $...]] | mixed','class_alias(':'string $original, string $alias [, bool $autoload = TRUE] | bool','class_exists(':'string $class_name [, bool $autoload = true] | bool','get_called_class(':'void | string','get_class_methods(':'mixed $class_name | array','get_class_vars(':'string $class_name | array','get_class(':'[ object $object = NULL] | string','get_declared_classes(':'void | array','get_declared_interfaces(':'void | array','get_declared_traits(':'void | array','get_object_vars(':'object $object | array','get_parent_class(':'[ mixed $object] | string','interface_exists(':'string $interface_name [, bool $autoload = true] | bool','is_a(':'object $object, string $class_name [, bool $allow_string = FALSE] | bool','is_subclass_of(':'mixed $object, string $class_name [, bool $allow_string = TRUE] | bool','method_exists(':'mixed $object, string $method_name | bool','property_exists(':'mixed $class, string $property | bool','trait_exists(':'string $traitname [, bool $autoload] | bool',} +let php_builtin['functions']['urls']={'base64_decode(':'string $data [, bool $strict = false] | string','base64_encode(':'string $data | string','get_headers(':'string $url [, int $format = 0] | array','get_meta_tags(':'string $filename [, bool $use_include_path = false] | array','http_build_query(':'mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738]]] | string','parse_url(':'string $url [, int $component = -1] | mixed','rawurldecode(':'string $str | string','rawurlencode(':'string $str | string','urldecode(':'string $str | string','urlencode(':'string $str | string',} +let php_builtin['functions']['filesystem']={'basename(':'string $path [, string $suffix] | string','chgrp(':'string $filename, mixed $group | bool','chmod(':'string $filename, int $mode | bool','chown(':'string $filename, mixed $user | bool','clearstatcache(':'[ bool $clear_realpath_cache = false [, string $filename]] | void','copy(':'string $source, string $dest [, resource $context] | bool','dirname(':'string $path | string','disk_free_space(':'string $directory | float','disk_total_space(':'string $directory | float','diskfreespace(':'diskfreespace — Alias of disk_free_space()','fclose(':'resource $handle | bool','feof(':'resource $handle | bool','fflush(':'resource $handle | bool','fgetc(':'resource $handle | string','fgetcsv(':'resource $handle [, int $length = 0 [, string $delimiter = '','' [, string $enclosure = ''"'' [, string $escape = ''\\'']]]] | array','fgets(':'resource $handle [, int $length] | string','fgetss(':'resource $handle [, int $length [, string $allowable_tags]] | string','file_exists(':'string $filename | bool','file_get_contents(':'string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen]]]] | string','file_put_contents(':'string $filename, mixed $data [, int $flags = 0 [, resource $context]] | int','file(':'string $filename [, int $flags = 0 [, resource $context]] | array','fileatime(':'string $filename | int','filectime(':'string $filename | int','filegroup(':'string $filename | int','fileinode(':'string $filename | int','filemtime(':'string $filename | int','fileowner(':'string $filename | int','fileperms(':'string $filename | int','filesize(':'string $filename | int','filetype(':'string $filename | string','flock(':'resource $handle, int $operation [, int &$wouldblock] | bool','fnmatch(':'string $pattern, string $string [, int $flags = 0] | bool','fopen(':'string $filename, string $mode [, bool $use_include_path = false [, resource $context]] | resource','fpassthru(':'resource $handle | int','fputcsv(':'resource $handle, array $fields [, string $delimiter = '','' [, string $enclosure = ''"'']] | int','fputs(':'fputs — Alias of fwrite()','fread(':'resource $handle, int $length | string','fscanf(':'resource $handle, string $format [, mixed &$...] | mixed','fseek(':'resource $handle, int $offset [, int $whence = SEEK_SET] | int','fstat(':'resource $handle | array','ftell(':'resource $handle | int','ftruncate(':'resource $handle, int $size | bool','fwrite(':'resource $handle, string $string [, int $length] | int','glob(':'string $pattern [, int $flags = 0] | array','is_dir(':'string $filename | bool','is_executable(':'string $filename | bool','is_file(':'string $filename | bool','is_link(':'string $filename | bool','is_readable(':'string $filename | bool','is_uploaded_file(':'string $filename | bool','is_writable(':'string $filename | bool','is_writeable(':'is_writeable — Alias of is_writable()','lchgrp(':'string $filename, mixed $group | bool','lchown(':'string $filename, mixed $user | bool','link(':'string $target, string $link | bool','linkinfo(':'string $path | int','lstat(':'string $filename | array','mkdir(':'string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context]]] | bool','move_uploaded_file(':'string $filename, string $destination | bool','parse_ini_file(':'string $filename [, bool $process_sections = false [, int $scanner_mode = INI_SCANNER_NORMAL]] | array','parse_ini_string(':'string $ini [, bool $process_sections = false [, int $scanner_mode = INI_SCANNER_NORMAL]] | array','pathinfo(':'string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME] | mixed','pclose(':'resource $handle | int','popen(':'string $command, string $mode | resource','readfile(':'string $filename [, bool $use_include_path = false [, resource $context]] | int','readlink(':'string $path | string','realpath_cache_get(':'void | array','realpath_cache_size(':'void | int','realpath(':'string $path | string','rename(':'string $oldname, string $newname [, resource $context] | bool','rewind(':'resource $handle | bool','rmdir(':'string $dirname [, resource $context] | bool','set_file_buffer(':'set_file_buffer — Alias of stream_set_write_buffer()','stat(':'string $filename | array','symlink(':'string $target, string $link | bool','tempnam(':'string $dir, string $prefix | string','tmpfile(':'void | resource','touch(':'string $filename [, int $time = time() [, int $atime]] | bool','umask(':'[ int $mask] | int','unlink(':'string $filename [, resource $context] | bool',} +let php_builtin['functions']['variable_handling']={'boolval(':'mixed $var | boolean','debug_zval_dump(':'mixed $variable [, mixed $...] | void','doubleval(':'doubleval — Alias of floatval()','empty(':'mixed $var | bool','floatval(':'mixed $var | float','get_defined_vars(':'void | array','get_resource_type(':'resource $handle | string','gettype(':'mixed $var | string','import_request_variables(':'string $types [, string $prefix] | bool','intval(':'mixed $var [, int $base = 10] | int','is_array(':'mixed $var | bool','is_bool(':'mixed $var | bool','is_callable(':'callable $name [, bool $syntax_only = false [, string &$callable_name]] | bool','is_double(':'is_double — Alias of is_float()','is_float(':'mixed $var | bool','is_int(':'mixed $var | bool','is_integer(':'is_integer — Alias of is_int()','is_long(':'is_long — Alias of is_int()','is_null(':'mixed $var | bool','is_numeric(':'mixed $var | bool','is_object(':'mixed $var | bool','is_real(':'is_real — Alias of is_float()','is_resource(':'mixed $var | bool','is_scalar(':'mixed $var | bool','is_string(':'mixed $var | bool','isset(':'mixed $var [, mixed $...] | bool','print_r(':'mixed $expression [, bool $return = false] | mixed','serialize(':'mixed $value | string','settype(':'mixed &$var, string $type | bool','strval(':'mixed $var | string','unserialize(':'string $str | mixed','unset(':'mixed $var [, mixed $...] | void','var_dump(':'mixed $expression [, mixed $...] | void','var_export(':'mixed $expression [, bool $return = false] | mixed',} +let php_builtin['functions']['calendar']={'cal_days_in_month(':'int $calendar, int $month, int $year | int','cal_from_jd(':'int $jd, int $calendar | array','cal_info(':'[ int $calendar = -1] | array','cal_to_jd(':'int $calendar, int $month, int $day, int $year | int','easter_date(':'[ int $year] | int','easter_days(':'[ int $year [, int $method = CAL_EASTER_DEFAULT]] | int','frenchtojd(':'int $month, int $day, int $year | int','gregoriantojd(':'int $month, int $day, int $year | int','jddayofweek(':'int $julianday [, int $mode = CAL_DOW_DAYNO] | mixed','jdmonthname(':'int $julianday, int $mode | string','jdtofrench(':'int $juliandaycount | string','jdtogregorian(':'int $julianday | string','jdtojewish(':'int $juliandaycount [, bool $hebrew = false [, int $fl = 0]] | string','jdtojulian(':'int $julianday | string','jdtounix(':'int $jday | int','jewishtojd(':'int $month, int $day, int $year | int','juliantojd(':'int $month, int $day, int $year | int','unixtojd(':'[ int $timestamp = time()] | int',} +let php_builtin['functions']['function_handling']={'call_user_func_array(':'callable $callback, array $param_arr | mixed','call_user_func(':'callable $callback [, mixed $parameter [, mixed $...]] | mixed','create_function(':'string $args, string $code | string','forward_static_call_array(':'callable $function, array $parameters | mixed','forward_static_call(':'callable $function [, mixed $parameter [, mixed $...]] | mixed','func_get_arg(':'int $arg_num | mixed','func_get_args(':'void | array','func_num_args(':'void | int','function_exists(':'string $function_name | bool','get_defined_functions(':'void | array','register_shutdown_function(':'callable $callback [, mixed $parameter [, mixed $...]] | void','register_tick_function(':'callable $function [, mixed $arg [, mixed $...]] | bool','unregister_tick_function(':'string $function_name | void',} +let php_builtin['functions']['directories']={'chdir(':'string $directory | bool','chroot(':'string $directory | bool','closedir(':'[ resource $dir_handle] | void','dir(':'string $directory [, resource $context] | Directory','getcwd(':'void | string','opendir(':'string $path [, resource $context] | resource','readdir(':'[ resource $dir_handle] | string','rewinddir(':'[ resource $dir_handle] | void','scandir(':'string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource $context]] | array',} +let php_builtin['functions']['date_time']={'checkdate(':'int $month, int $day, int $year | bool','date_default_timezone_get(':'void | string','date_default_timezone_set(':'string $timezone_identifier | bool','date_parse_from_format(':'string $format, string $date | array','date_parse(':'string $date | array','date_sun_info(':'int $time, float $latitude, float $longitude | array','date_sunrise(':'int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get("date.default_latitude") [, float $longitude = ini_get("date.default_longitude") [, float $zenith = ini_get("date.sunrise_zenith") [, float $gmt_offset = 0]]]]] | mixed','date_sunset(':'int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get("date.default_latitude") [, float $longitude = ini_get("date.default_longitude") [, float $zenith = ini_get("date.sunset_zenith") [, float $gmt_offset = 0]]]]] | mixed','date(':'string $format [, int $timestamp = time()] | string','getdate(':'[ int $timestamp = time()] | array','gettimeofday(':'[ bool $return_float = false] | mixed','gmdate(':'string $format [, int $timestamp = time()] | string','gmmktime(':'[ int $hour = gmdate("H") [, int $minute = gmdate("i") [, int $second = gmdate("s") [, int $month = gmdate("n") [, int $day = gmdate("j") [, int $year = gmdate("Y") [, int $is_dst = -1]]]]]]] | int','gmstrftime(':'string $format [, int $timestamp = time()] | string','idate(':'string $format [, int $timestamp = time()] | int','localtime(':'[ int $timestamp = time() [, bool $is_associative = false]] | array','microtime(':'[ bool $get_as_float = false] | mixed','mktime(':'[ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1]]]]]]] | int','strftime(':'string $format [, int $timestamp = time()] | string','strptime(':'string $date, string $format | array','strtotime(':'string $time [, int $now = time()] | int','time(':'void | int','timezone_name_from_abbr(':'string $abbr [, int $gmtOffset = -1 [, int $isdst = -1]] | string','timezone_version_get(':'void | string',} +let php_builtin['functions']['network']={'checkdnsrr(':'string $host [, string $type = "MX"] | bool','closelog(':'void | bool','define_syslog_variables(':'void | void','dns_get_record(':'string $hostname [, int $type = DNS_ANY [, array &$authns [, array &$addtl [, bool &$raw = false]]]] | array','fsockopen(':'string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout")]]]] | resource','gethostbyaddr(':'string $ip_address | string','gethostbyname(':'string $hostname | string','gethostbynamel(':'string $hostname | array','gethostname(':'void | string','getmxrr(':'string $hostname, array &$mxhosts [, array &$weight] | bool','getprotobyname(':'string $name | int','getprotobynumber(':'int $number | string','getservbyname(':'string $service, string $protocol | int','getservbyport(':'int $port, string $protocol | string','header_register_callback(':'callable $callback | bool','header_remove(':'[ string $name] | void','header(':'string $string [, bool $replace = true [, int $http_response_code]] | void','headers_list(':'void | array','headers_sent(':'[ string &$file [, int &$line]] | bool','http_response_code(':'[ int $response_code] | int','inet_ntop(':'string $in_addr | string','inet_pton(':'string $address | string','ip2long(':'string $ip_address | int','long2ip(':'string $proper_address | string','openlog(':'string $ident, int $option, int $facility | bool','pfsockopen(':'string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout")]]]] | resource','setcookie(':'string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false]]]]]] | bool','setrawcookie(':'string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false]]]]]] | bool','socket_get_status(':'socket_get_status — Alias of stream_get_meta_data()','socket_set_blocking(':'socket_set_blocking — Alias of stream_set_blocking()','socket_set_timeout(':'socket_set_timeout — Alias of stream_set_timeout()','syslog(':'int $priority, string $message | bool',} +let php_builtin['functions']['spl']={'class_implements(':'mixed $class [, bool $autoload = true] | array','class_parents(':'mixed $class [, bool $autoload = true] | array','class_uses(':'mixed $class [, bool $autoload = true] | array','iterator_apply(':'Traversable $iterator, callable $function [, array $args] | int','iterator_count(':'Traversable $iterator | int','iterator_to_array(':'Traversable $iterator [, bool $use_keys = true] | array','spl_autoload_call(':'string $class_name | void','spl_autoload_extensions(':'[ string $file_extensions] | string','spl_autoload_functions(':'void | array','spl_autoload_register(':'[ callable $autoload_function [, bool $throw = true [, bool $prepend = false]]] | bool','spl_autoload_unregister(':'mixed $autoload_function | bool','spl_autoload(':'string $class_name [, string $file_extensions = spl_autoload_extensions()] | void','spl_classes(':'void | array','spl_object_hash(':'object $obj | string',} +let php_builtin['functions']['misc']={'connection_aborted(':'void | int','connection_status(':'void | int','connection_timeout(':'void | int','constant(':'string $name | mixed','define(':'string $name, mixed $value [, bool $case_insensitive = false] | bool','defined(':'string $name | bool','eval(':'string $code | mixed','exit(':'[ string $status] | void','get_browser(':'[ string $user_agent [, bool $return_array = false]] | mixed','__halt_compiler(':'void | void','highlight_file(':'string $filename [, bool $return = false] | mixed','highlight_string(':'string $str [, bool $return = false] | mixed','ignore_user_abort(':'[ string $value] | int','pack(':'string $format [, mixed $args [, mixed $...]] | string','php_check_syntax(':'string $filename [, string &$error_message] | bool','php_strip_whitespace(':'string $filename | string','show_source(':'show_source — Alias of highlight_file()','sleep(':'int $seconds | int','sys_getloadavg(':'void | array','time_nanosleep(':'int $seconds, int $nanoseconds | mixed','time_sleep_until(':'float $timestamp | bool','uniqid(':'[ string $prefix = "" [, bool $more_entropy = false]] | string','unpack(':'string $format, string $data | array','usleep(':'int $micro_seconds | void',} +let php_builtin['functions']['curl']={'curl_close(':'resource $ch | void','curl_copy_handle(':'resource $ch | resource','curl_errno(':'resource $ch | int','curl_error(':'resource $ch | string','curl_escape(':'resource $ch, string $str | string','curl_exec(':'resource $ch | mixed','curl_getinfo(':'resource $ch [, int $opt = 0] | mixed','curl_init(':'[ string $url = NULL] | resource','curl_multi_add_handle(':'resource $mh, resource $ch | int','curl_multi_close(':'resource $mh | void','curl_multi_exec(':'resource $mh, int &$still_running | int','curl_multi_getcontent(':'resource $ch | string','curl_multi_info_read(':'resource $mh [, int &$msgs_in_queue = NULL] | array','curl_multi_init(':'void | resource','curl_multi_remove_handle(':'resource $mh, resource $ch | int','curl_multi_select(':'resource $mh [, float $timeout = 1.0] | int','curl_multi_setopt(':'resource $mh, int $option, mixed $value | bool','curl_multi_strerror(':'int $errornum | string','curl_pause(':'resource $ch, int $bitmask | int','curl_reset(':'resource $ch | void','curl_setopt_array(':'resource $ch, array $options | bool','curl_setopt(':'resource $ch, int $option, mixed $value | bool','curl_share_close(':'resource $sh | void','curl_share_init(':'void | resource','curl_share_setopt(':'resource $sh, int $option, string $value | bool','curl_strerror(':'int $errornum | string','curl_unescape(':'resource $ch, string $str | string','curl_version(':'[ int $age = CURLVERSION_NOW] | array',} +let php_builtin['functions']['error_handling']={'debug_backtrace(':'[ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0]] | array','debug_print_backtrace(':'[ int $options = 0 [, int $limit = 0]] | void','error_get_last(':'void | array','error_log(':'string $message [, int $message_type = 0 [, string $destination [, string $extra_headers]]] | bool','error_reporting(':'[ int $level] | int','restore_error_handler(':'void | bool','restore_exception_handler(':'void | bool','set_error_handler(':'callable $error_handler [, int $error_types = E_ALL | E_STRICT] | mixed','set_exception_handler(':'callable $exception_handler | callable','trigger_error(':'string $error_msg [, int $error_type = E_USER_NOTICE] | bool',} +let php_builtin['functions']['dom']={'dom_import_simplexml(':'SimpleXMLElement $node | DOMElement',} +let php_builtin['functions']['program_execution']={'escapeshellarg(':'string $arg | string','escapeshellcmd(':'string $command | string','exec(':'string $command [, array &$output [, int &$return_var]] | string','passthru(':'string $command [, int &$return_var] | void','proc_close(':'resource $process | int','proc_get_status(':'resource $process | array','proc_nice(':'int $increment | bool','proc_open(':'string $cmd, array $descriptorspec, array &$pipes [, string $cwd [, array $env [, array $other_options]]] | resource','proc_terminate(':'resource $process [, int $signal = 15] | bool','shell_exec(':'string $cmd | string','system(':'string $command [, int &$return_var] | string',} +let php_builtin['functions']['mail']={'ezmlm_hash(':'string $addr | int','mail(':'string $to, string $subject, string $message [, string $additional_headers [, string $additional_parameters]] | bool',} +let php_builtin['functions']['fastcgi_process_manager']={'fastcgi_finish_request(':'void | boolean',} +let php_builtin['functions']['filter']={'filter_has_var(':'int $type, string $variable_name | bool','filter_id(':'string $filtername | int','filter_input_array(':'int $type [, mixed $definition [, bool $add_empty = true]] | mixed','filter_input(':'int $type, string $variable_name [, int $filter = FILTER_DEFAULT [, mixed $options]] | mixed','filter_list(':'void | array','filter_var_array(':'array $data [, mixed $definition [, bool $add_empty = true]] | mixed','filter_var(':'mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options]] | mixed',} +let php_builtin['functions']['fileinfo']={'finfo_buffer(':'resource $finfo [, string $string = NULL [, int $options = FILEINFO_NONE [, resource $context = NULL]]] | string','finfo_close(':'resource $finfo | bool','finfo_file(':'resource $finfo [, string $file_name = NULL [, int $options = FILEINFO_NONE [, resource $context = NULL]]] | string','finfo_open(':'[ int $options = FILEINFO_NONE [, string $magic_file = NULL]] | resource','finfo_set_flags(':'resource $finfo, int $options | bool','mime_content_type(':'string $filename | string',} +let php_builtin['functions']['output_control']={'flush(':'void | void','ob_clean(':'void | void','ob_end_clean(':'void | bool','ob_end_flush(':'void | bool','ob_flush(':'void | void','ob_get_clean(':'void | string','ob_get_contents(':'void | string','ob_get_flush(':'void | string','ob_get_length(':'void | int','ob_get_level(':'void | int','ob_get_status(':'[ bool $full_status = FALSE] | array','ob_gzhandler(':'string $buffer, int $mode | string','ob_implicit_flush(':'[ int $flag = true] | void','ob_list_handlers(':'void | array','ob_start(':'[ callable $output_callback = NULL [, int $chunk_size = 0 [, int $flags = PHP_OUTPUT_HANDLER_STDFLAGS]]] | bool','output_add_rewrite_var(':'string $name, string $value | bool','output_reset_rewrite_vars(':'void | bool',} +let php_builtin['functions']['gd']={'gd_info(':'void | array','getimagesize(':'string $filename [, array &$imageinfo] | array','getimagesizefromstring(':'string $imagedata [, array &$imageinfo] | array','image_type_to_extension(':'int $imagetype [, bool $include_dot = TRUE] | string','image_type_to_mime_type(':'int $imagetype | string','image2wbmp(':'resource $image [, string $filename [, int $threshold]] | bool','imageaffine(':'resource $image, array $affine [, array $clip] | resource','imageaffinematrixconcat(':'array $m1, array $m2 | array','imageaffinematrixget(':'int $type [, mixed $options] | array','imagealphablending(':'resource $image, bool $blendmode | bool','imageantialias(':'resource $image, bool $enabled | bool','imagearc(':'resource $image, int $cx, int $cy, int $width, int $height, int $start, int $end, int $color | bool','imagechar(':'resource $image, int $font, int $x, int $y, string $c, int $color | bool','imagecharup(':'resource $image, int $font, int $x, int $y, string $c, int $color | bool','imagecolorallocate(':'resource $image, int $red, int $green, int $blue | int','imagecolorallocatealpha(':'resource $image, int $red, int $green, int $blue, int $alpha | int','imagecolorat(':'resource $image, int $x, int $y | int','imagecolorclosest(':'resource $image, int $red, int $green, int $blue | int','imagecolorclosestalpha(':'resource $image, int $red, int $green, int $blue, int $alpha | int','imagecolorclosesthwb(':'resource $image, int $red, int $green, int $blue | int','imagecolordeallocate(':'resource $image, int $color | bool','imagecolorexact(':'resource $image, int $red, int $green, int $blue | int','imagecolorexactalpha(':'resource $image, int $red, int $green, int $blue, int $alpha | int','imagecolormatch(':'resource $image1, resource $image2 | bool','imagecolorresolve(':'resource $image, int $red, int $green, int $blue | int','imagecolorresolvealpha(':'resource $image, int $red, int $green, int $blue, int $alpha | int','imagecolorset(':'resource $image, int $index, int $red, int $green, int $blue [, int $alpha = 0] | void','imagecolorsforindex(':'resource $image, int $index | array','imagecolorstotal(':'resource $image | int','imagecolortransparent(':'resource $image [, int $color] | int','imageconvolution(':'resource $image, array $matrix, float $div, float $offset | bool','imagecopy(':'resource $dst_im, resource $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_w, int $src_h | bool','imagecopymerge(':'resource $dst_im, resource $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_w, int $src_h, int $pct | bool','imagecopymergegray(':'resource $dst_im, resource $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_w, int $src_h, int $pct | bool','imagecopyresampled(':'resource $dst_image, resource $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_w, int $dst_h, int $src_w, int $src_h | bool','imagecopyresized(':'resource $dst_image, resource $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_w, int $dst_h, int $src_w, int $src_h | bool','imagecreate(':'int $width, int $height | resource','imagecreatefromgd(':'string $filename | resource','imagecreatefromgd2(':'string $filename | resource','imagecreatefromgd2part(':'string $filename, int $srcX, int $srcY, int $width, int $height | resource','imagecreatefromgif(':'string $filename | resource','imagecreatefromjpeg(':'string $filename | resource','imagecreatefrompng(':'string $filename | resource','imagecreatefromstring(':'string $image | resource','imagecreatefromwbmp(':'string $filename | resource','imagecreatefromwebp(':'string $filename | resource','imagecreatefromxbm(':'string $filename | resource','imagecreatefromxpm(':'string $filename | resource','imagecreatetruecolor(':'int $width, int $height | resource','imagecrop(':'resource $image, array $rect | resource','imagecropauto(':'resource $image [, int $mode = -1 [, float $threshold = .5 [, int $color = -1]]] | resource','imagedashedline(':'resource $image, int $x1, int $y1, int $x2, int $y2, int $color | bool','imagedestroy(':'resource $image | bool','imageellipse(':'resource $image, int $cx, int $cy, int $width, int $height, int $color | bool','imagefill(':'resource $image, int $x, int $y, int $color | bool','imagefilledarc(':'resource $image, int $cx, int $cy, int $width, int $height, int $start, int $end, int $color, int $style | bool','imagefilledellipse(':'resource $image, int $cx, int $cy, int $width, int $height, int $color | bool','imagefilledpolygon(':'resource $image, array $points, int $num_points, int $color | bool','imagefilledrectangle(':'resource $image, int $x1, int $y1, int $x2, int $y2, int $color | bool','imagefilltoborder(':'resource $image, int $x, int $y, int $border, int $color | bool','imagefilter(':'resource $image, int $filtertype [, int $arg1 [, int $arg2 [, int $arg3 [, int $arg4]]]] | bool','imageflip(':'resource $image, int $mode | bool','imagefontheight(':'int $font | int','imagefontwidth(':'int $font | int','imageftbbox(':'float $size, float $angle, string $fontfile, string $text [, array $extrainfo] | array','imagefttext(':'resource $image, float $size, float $angle, int $x, int $y, int $color, string $fontfile, string $text [, array $extrainfo] | array','imagegammacorrect(':'resource $image, float $inputgamma, float $outputgamma | bool','imagegd(':'resource $image [, string $filename] | bool','imagegd2(':'resource $image [, string $filename [, int $chunk_size [, int $type = IMG_GD2_RAW]]] | bool','imagegif(':'resource $image [, string $filename] | bool','imagegrabscreen(':'void | resource','imagegrabwindow(':'int $window_handle [, int $client_area = 0] | resource','imageinterlace(':'resource $image [, int $interlace = 0] | int','imageistruecolor(':'resource $image | bool','imagejpeg(':'resource $image [, string $filename [, int $quality]] | bool','imagelayereffect(':'resource $image, int $effect | bool','imageline(':'resource $image, int $x1, int $y1, int $x2, int $y2, int $color | bool','imageloadfont(':'string $file | int','imagepalettecopy(':'resource $destination, resource $source | void','imagepalettetotruecolor(':'resource $src | bool','imagepng(':'resource $image [, string $filename [, int $quality [, int $filters]]] | bool','imagepolygon(':'resource $image, array $points, int $num_points, int $color | bool','imagepsbbox(':'string $text, resource $font, int $size | array','imagepsencodefont(':'resource $font_index, string $encodingfile | bool','imagepsextendfont(':'resource $font_index, float $extend | bool','imagepsfreefont(':'resource $font_index | bool','imagepsloadfont(':'string $filename | resource','imagepsslantfont(':'resource $font_index, float $slant | bool','imagepstext(':'resource $image, string $text, resource $font_index, int $size, int $foreground, int $background, int $x, int $y [, int $space = 0 [, int $tightness = 0 [, float $angle = 0.0 [, int $antialias_steps = 4]]]] | array','imagerectangle(':'resource $image, int $x1, int $y1, int $x2, int $y2, int $color | bool','imagerotate(':'resource $image, float $angle, int $bgd_color [, int $ignore_transparent = 0] | resource','imagesavealpha(':'resource $image, bool $saveflag | bool','imagescale(':'resource $image, int $new_width [, int $new_height = -1 [, int $mode = IMG_BILINEAR_FIXED]] | resource','imagesetbrush(':'resource $image, resource $brush | bool','imagesetinterpolation(':'resource $image [, int $method = IMG_BILINEAR_FIXED] | bool','imagesetpixel(':'resource $image, int $x, int $y, int $color | bool','imagesetstyle(':'resource $image, array $style | bool','imagesetthickness(':'resource $image, int $thickness | bool','imagesettile(':'resource $image, resource $tile | bool','imagestring(':'resource $image, int $font, int $x, int $y, string $string, int $color | bool','imagestringup(':'resource $image, int $font, int $x, int $y, string $string, int $color | bool','imagesx(':'resource $image | int','imagesy(':'resource $image | int','imagetruecolortopalette(':'resource $image, bool $dither, int $ncolors | bool','imagettfbbox(':'float $size, float $angle, string $fontfile, string $text | array','imagettftext(':'resource $image, float $size, float $angle, int $x, int $y, int $color, string $fontfile, string $text | array','imagetypes(':'void | int','imagewbmp(':'resource $image [, string $filename [, int $foreground]] | bool','imagewebp(':'resource $image, string $filename | bool','imagexbm(':'resource $image, string $filename [, int $foreground] | bool','iptcembed(':'string $iptcdata, string $jpeg_file_name [, int $spool] | mixed','iptcparse(':'string $iptcblock | array','jpeg2wbmp(':'string $jpegname, string $wbmpname, int $dest_height, int $dest_width, int $threshold | bool','png2wbmp(':'string $pngname, string $wbmpname, int $dest_height, int $dest_width, int $threshold | bool',} +let php_builtin['functions']['iconv']={'iconv_get_encoding(':'[ string $type = "all"] | mixed','iconv_mime_decode_headers(':'string $encoded_headers [, int $mode = 0 [, string $charset = ini_get("iconv.internal_encoding")]] | array','iconv_mime_decode(':'string $encoded_header [, int $mode = 0 [, string $charset = ini_get("iconv.internal_encoding")]] | string','iconv_mime_encode(':'string $field_name, string $field_value [, array $preferences = NULL] | string','iconv_set_encoding(':'string $type, string $charset | bool','iconv_strlen(':'string $str [, string $charset = ini_get("iconv.internal_encoding")] | int','iconv_strpos(':'string $haystack, string $needle [, int $offset = 0 [, string $charset = ini_get("iconv.internal_encoding")]] | int','iconv_strrpos(':'string $haystack, string $needle [, string $charset = ini_get("iconv.internal_encoding")] | int','iconv_substr(':'string $str, int $offset [, int $length = iconv_strlen($str, $charset) [, string $charset = ini_get("iconv.internal_encoding")]] | string','iconv(':'string $in_charset, string $out_charset, string $str | string','ob_iconv_handler(':'string $contents, int $status | string',} +let php_builtin['functions']['json']={'json_decode(':'string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0]]] | mixed','json_encode(':'mixed $value [, int $options = 0 [, int $depth = 512]] | string','json_last_error_msg(':'void | string','json_last_error(':'void | int',} +let php_builtin['functions']['libxml']={'libxml_clear_errors(':'void | void','libxml_disable_entity_loader(':'[ bool $disable = true] | bool','libxml_get_errors(':'void | array','libxml_get_last_error(':'void | LibXMLError','libxml_set_external_entity_loader(':'callable $resolver_function | void','libxml_set_streams_context(':'resource $streams_context | void','libxml_use_internal_errors(':'[ bool $use_errors = false] | bool',} +let php_builtin['functions']['multibyte_string']={'mb_check_encoding(':'[ string $var = NULL [, string $encoding = mb_internal_encoding()]] | bool','mb_convert_case(':'string $str, int $mode [, string $encoding = mb_internal_encoding()] | string','mb_convert_encoding(':'string $str, string $to_encoding [, mixed $from_encoding = mb_internal_encoding()] | string','mb_convert_kana(':'string $str [, string $option = "KV" [, string $encoding = mb_internal_encoding()]] | string','mb_convert_variables(':'string $to_encoding, mixed $from_encoding, mixed &$vars [, mixed &$...] | string','mb_decode_mimeheader(':'string $str | string','mb_decode_numericentity(':'string $str, array $convmap [, string $encoding = mb_internal_encoding()] | string','mb_detect_encoding(':'string $str [, mixed $encoding_list = mb_detect_order() [, bool $strict = false]] | string','mb_detect_order(':'[ mixed $encoding_list = mb_detect_order()] | mixed','mb_encode_mimeheader(':'string $str [, string $charset = mb_internal_encoding() [, string $transfer_encoding = "B" [, string $linefeed = "\r\n" [, int $indent = 0]]]] | string','mb_encode_numericentity(':'string $str, array $convmap [, string $encoding = mb_internal_encoding() [, bool $is_hex = FALSE]] | string','mb_encoding_aliases(':'string $encoding | array','mb_ereg_match(':'string $pattern, string $string [, string $option = "msr"] | bool','mb_ereg_replace_callback(':'string $pattern, callable $callback, string $string [, string $option = "msr"] | string','mb_ereg_replace(':'string $pattern, string $replacement, string $string [, string $option = "msr"] | string','mb_ereg_search_getpos(':'void | int','mb_ereg_search_getregs(':'void | array','mb_ereg_search_init(':'string $string [, string $pattern [, string $option = "msr"]] | bool','mb_ereg_search_pos(':'[ string $pattern [, string $option = "ms"]] | array','mb_ereg_search_regs(':'[ string $pattern [, string $option = "ms"]] | array','mb_ereg_search_setpos(':'int $position | bool','mb_ereg_search(':'[ string $pattern [, string $option = "ms"]] | bool','mb_ereg(':'string $pattern, string $string [, array $regs] | int','mb_eregi_replace(':'string $pattern, string $replace, string $string [, string $option = "msri"] | string','mb_eregi(':'string $pattern, string $string [, array $regs] | int','mb_get_info(':'[ string $type = "all"] | mixed','mb_http_input(':'[ string $type = ""] | mixed','mb_http_output(':'[ string $encoding = mb_http_output()] | mixed','mb_internal_encoding(':'[ string $encoding = mb_internal_encoding()] | mixed','mb_language(':'[ string $language = mb_language()] | mixed','mb_list_encodings(':'void | array','mb_output_handler(':'string $contents, int $status | string','mb_parse_str(':'string $encoded_string [, array &$result] | bool','mb_preferred_mime_name(':'string $encoding | string','mb_regex_encoding(':'[ string $encoding = mb_regex_encoding()] | mixed','mb_regex_set_options(':'[ string $options = mb_regex_set_options()] | string','mb_send_mail(':'string $to, string $subject, string $message [, string $additional_headers = NULL [, string $additional_parameter = NULL]] | bool','mb_split(':'string $pattern, string $string [, int $limit = -1] | array','mb_strcut(':'string $str, int $start [, int $length = NULL [, string $encoding = mb_internal_encoding()]] | string','mb_strimwidth(':'string $str, int $start, int $width [, string $trimmarker = "" [, string $encoding = mb_internal_encoding()]] | string','mb_stripos(':'string $haystack, string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding()]] | int','mb_stristr(':'string $haystack, string $needle [, bool $before_needle = false [, string $encoding = mb_internal_encoding()]] | string','mb_strlen(':'string $str [, string $encoding = mb_internal_encoding()] | mixed','mb_strpos(':'string $haystack, string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding()]] | int','mb_strrchr(':'string $haystack, string $needle [, bool $part = false [, string $encoding = mb_internal_encoding()]] | string','mb_strrichr(':'string $haystack, string $needle [, bool $part = false [, string $encoding = mb_internal_encoding()]] | string','mb_strripos(':'string $haystack, string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding()]] | int','mb_strrpos(':'string $haystack, string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding()]] | int','mb_strstr(':'string $haystack, string $needle [, bool $before_needle = false [, string $encoding = mb_internal_encoding()]] | string','mb_strtolower(':'string $str [, string $encoding = mb_internal_encoding()] | string','mb_strtoupper(':'string $str [, string $encoding = mb_internal_encoding()] | string','mb_strwidth(':'string $str [, string $encoding = mb_internal_encoding()] | int','mb_substitute_character(':'[ mixed $substrchar = mb_substitute_character()] | mixed','mb_substr_count(':'string $haystack, string $needle [, string $encoding = mb_internal_encoding()] | int','mb_substr(':'string $str, int $start [, int $length = NULL [, string $encoding = mb_internal_encoding()]] | string',} +let php_builtin['functions']['mssql']={'mssql_bind(':'resource $stmt, string $param_name, mixed &$var, int $type [, bool $is_output = false [, bool $is_null = false [, int $maxlen = -1]]] | bool','mssql_close(':'[ resource $link_identifier] | bool','mssql_connect(':'[ string $servername [, string $username [, string $password [, bool $new_link = false]]]] | resource','mssql_data_seek(':'resource $result_identifier, int $row_number | bool','mssql_execute(':'resource $stmt [, bool $skip_results = false] | mixed','mssql_fetch_array(':'resource $result [, int $result_type = MSSQL_BOTH] | array','mssql_fetch_assoc(':'resource $result_id | array','mssql_fetch_batch(':'resource $result | int','mssql_fetch_field(':'resource $result [, int $field_offset = -1] | object','mssql_fetch_object(':'resource $result | object','mssql_fetch_row(':'resource $result | array','mssql_field_length(':'resource $result [, int $offset = -1] | int','mssql_field_name(':'resource $result [, int $offset = -1] | string','mssql_field_seek(':'resource $result, int $field_offset | bool','mssql_field_type(':'resource $result [, int $offset = -1] | string','mssql_free_result(':'resource $result | bool','mssql_free_statement(':'resource $stmt | bool','mssql_get_last_message(':'void | string','mssql_guid_string(':'string $binary [, bool $short_format = false] | string','mssql_init(':'string $sp_name [, resource $link_identifier] | resource','mssql_min_error_severity(':'int $severity | void','mssql_min_message_severity(':'int $severity | void','mssql_next_result(':'resource $result_id | bool','mssql_num_fields(':'resource $result | int','mssql_num_rows(':'resource $result | int','mssql_pconnect(':'[ string $servername [, string $username [, string $password [, bool $new_link = false]]]] | resource','mssql_query(':'string $query [, resource $link_identifier [, int $batch_size = 0]] | mixed','mssql_result(':'resource $result, int $row, mixed $field | string','mssql_rows_affected(':'resource $link_identifier | int','mssql_select_db(':'string $database_name [, resource $link_identifier] | bool',} +let php_builtin['functions']['mysql']={'mysql_affected_rows(':'[ resource $link_identifier = NULL] | int','mysql_client_encoding(':'[ resource $link_identifier = NULL] | string','mysql_close(':'[ resource $link_identifier = NULL] | bool','mysql_connect(':'[ string $server = ini_get("mysql.default_host") [, string $username = ini_get("mysql.default_user") [, string $password = ini_get("mysql.default_password") [, bool $new_link = false [, int $client_flags = 0]]]]] | resource','mysql_create_db(':'string $database_name [, resource $link_identifier = NULL] | bool','mysql_data_seek(':'resource $result, int $row_number | bool','mysql_db_name(':'resource $result, int $row [, mixed $field = NULL] | string','mysql_db_query(':'string $database, string $query [, resource $link_identifier = NULL] | resource','mysql_drop_db(':'string $database_name [, resource $link_identifier = NULL] | bool','mysql_errno(':'[ resource $link_identifier = NULL] | int','mysql_error(':'[ resource $link_identifier = NULL] | string','mysql_escape_string(':'string $unescaped_string | string','mysql_fetch_array(':'resource $result [, int $result_type = MYSQL_BOTH] | array','mysql_fetch_assoc(':'resource $result | array','mysql_fetch_field(':'resource $result [, int $field_offset = 0] | object','mysql_fetch_lengths(':'resource $result | array','mysql_fetch_object(':'resource $result [, string $class_name [, array $params]] | object','mysql_fetch_row(':'resource $result | array','mysql_field_flags(':'resource $result, int $field_offset | string','mysql_field_len(':'resource $result, int $field_offset | int','mysql_field_name(':'resource $result, int $field_offset | string','mysql_field_seek(':'resource $result, int $field_offset | bool','mysql_field_table(':'resource $result, int $field_offset | string','mysql_field_type(':'resource $result, int $field_offset | string','mysql_free_result(':'resource $result | bool','mysql_get_client_info(':'void | string','mysql_get_host_info(':'[ resource $link_identifier = NULL] | string','mysql_get_proto_info(':'[ resource $link_identifier = NULL] | int','mysql_get_server_info(':'[ resource $link_identifier = NULL] | string','mysql_info(':'[ resource $link_identifier = NULL] | string','mysql_insert_id(':'[ resource $link_identifier = NULL] | int','mysql_list_dbs(':'[ resource $link_identifier = NULL] | resource','mysql_list_fields(':'string $database_name, string $table_name [, resource $link_identifier = NULL] | resource','mysql_list_processes(':'[ resource $link_identifier = NULL] | resource','mysql_list_tables(':'string $database [, resource $link_identifier = NULL] | resource','mysql_num_fields(':'resource $result | int','mysql_num_rows(':'resource $result | int','mysql_pconnect(':'[ string $server = ini_get("mysql.default_host") [, string $username = ini_get("mysql.default_user") [, string $password = ini_get("mysql.default_password") [, int $client_flags = 0]]]] | resource','mysql_ping(':'[ resource $link_identifier = NULL] | bool','mysql_query(':'string $query [, resource $link_identifier = NULL] | mixed','mysql_real_escape_string(':'string $unescaped_string [, resource $link_identifier = NULL] | string','mysql_result(':'resource $result, int $row [, mixed $field = 0] | string','mysql_select_db(':'string $database_name [, resource $link_identifier = NULL] | bool','mysql_set_charset(':'string $charset [, resource $link_identifier = NULL] | bool','mysql_stat(':'[ resource $link_identifier = NULL] | string','mysql_tablename(':'resource $result, int $i | string','mysql_thread_id(':'[ resource $link_identifier = NULL] | int','mysql_unbuffered_query(':'string $query [, resource $link_identifier = NULL] | resource',} +let php_builtin['functions']['mysqli']={'mysqli_disable_reads_from_master(':'mysqli $link | bool','mysqli_disable_rpl_parse(':'mysqli $link | bool','mysqli_enable_reads_from_master(':'mysqli $link | bool','mysqli_enable_rpl_parse(':'mysqli $link | bool','mysqli_get_cache_stats(':'void | array','mysqli_master_query(':'mysqli $link, string $query | bool','mysqli_rpl_parse_enabled(':'mysqli $link | int','mysqli_rpl_probe(':'mysqli $link | bool','mysqli_slave_query(':'mysqli $link, string $query | bool',} +let php_builtin['functions']['password_hashing']={'password_get_info(':'string $hash | array','password_hash(':'string $password, integer $algo [, array $options] | string','password_needs_rehash(':'string $hash, string $algo [, string $options] | boolean','password_verify(':'string $password, string $hash | boolean',} +let php_builtin['functions']['postgresql']={'pg_affected_rows(':'resource $result | int','pg_cancel_query(':'resource $connection | bool','pg_client_encoding(':'[ resource $connection] | string','pg_close(':'[ resource $connection] | bool','pg_connect(':'string $connection_string [, int $connect_type] | resource','pg_connection_busy(':'resource $connection | bool','pg_connection_reset(':'resource $connection | bool','pg_connection_status(':'resource $connection | int','pg_convert(':'resource $connection, string $table_name, array $assoc_array [, int $options = 0] | array','pg_copy_from(':'resource $connection, string $table_name, array $rows [, string $delimiter [, string $null_as]] | bool','pg_copy_to(':'resource $connection, string $table_name [, string $delimiter [, string $null_as]] | array','pg_dbname(':'[ resource $connection] | string','pg_delete(':'resource $connection, string $table_name, array $assoc_array [, int $options = PGSQL_DML_EXEC] | mixed','pg_end_copy(':'[ resource $connection] | bool','pg_escape_bytea(':'[ resource $connection [, string $data]] | string','pg_escape_identifier(':'[ resource $connection [, string $data]] | string','pg_escape_literal(':'[ resource $connection [, string $data]] | string','pg_escape_string(':'[ resource $connection [, string $data]] | string','pg_execute(':'[ resource $connection [, string $stmtname [, array $params]]] | resource','pg_fetch_all_columns(':'resource $result [, int $column = 0] | array','pg_fetch_all(':'resource $result | array','pg_fetch_array(':'resource $result [, int $row [, int $result_type = PGSQL_BOTH]] | array','pg_fetch_assoc(':'resource $result [, int $row] | array','pg_fetch_object(':'resource $result [, int $row [, int $result_type = PGSQL_ASSOC]] | object','pg_fetch_result(':'resource $result, int $row, mixed $field | string','pg_fetch_row(':'resource $result [, int $row] | array','pg_field_is_null(':'resource $result, int $row, mixed $field | int','pg_field_name(':'resource $result, int $field_number | string','pg_field_num(':'resource $result, string $field_name | int','pg_field_prtlen(':'resource $result, int $row_number, mixed $field_name_or_number | int','pg_field_size(':'resource $result, int $field_number | int','pg_field_table(':'resource $result, int $field_number [, bool $oid_only = false] | mixed','pg_field_type_oid(':'resource $result, int $field_number | int','pg_field_type(':'resource $result, int $field_number | string','pg_free_result(':'resource $result | bool','pg_get_notify(':'resource $connection [, int $result_type] | array','pg_get_pid(':'resource $connection | int','pg_get_result(':'[ resource $connection] | resource','pg_host(':'[ resource $connection] | string','pg_insert(':'resource $connection, string $table_name, array $assoc_array [, int $options = PGSQL_DML_EXEC] | mixed','pg_last_error(':'[ resource $connection] | string','pg_last_notice(':'resource $connection | string','pg_last_oid(':'resource $result | string','pg_lo_close(':'resource $large_object | bool','pg_lo_create(':'[ resource $connection [, mixed $object_id]] | int','pg_lo_export(':'[ resource $connection [, int $oid [, string $pathname]]] | bool','pg_lo_import(':'[ resource $connection [, string $pathname [, mixed $object_id]]] | int','pg_lo_open(':'resource $connection, int $oid, string $mode | resource','pg_lo_read_all(':'resource $large_object | int','pg_lo_read(':'resource $large_object [, int $len = 8192] | string','pg_lo_seek(':'resource $large_object, int $offset [, int $whence = PGSQL_SEEK_CUR] | bool','pg_lo_tell(':'resource $large_object | int','pg_lo_truncate(':'resource $large_object, int $size | bool','pg_lo_unlink(':'resource $connection, int $oid | bool','pg_lo_write(':'resource $large_object, string $data [, int $len] | int','pg_meta_data(':'resource $connection, string $table_name [, bool $extended] | array','pg_num_fields(':'resource $result | int','pg_num_rows(':'resource $result | int','pg_options(':'[ resource $connection] | string','pg_parameter_status(':'[ resource $connection [, string $param_name]] | string','pg_pconnect(':'string $connection_string [, int $connect_type] | resource','pg_ping(':'[ resource $connection] | bool','pg_port(':'[ resource $connection] | int','pg_prepare(':'[ resource $connection [, string $stmtname [, string $query]]] | resource','pg_put_line(':'[ resource $connection [, string $data]] | bool','pg_query_params(':'[ resource $connection [, string $query [, array $params]]] | resource','pg_query(':'[ resource $connection [, string $query]] | resource','pg_result_error_field(':'resource $result, int $fieldcode | string','pg_result_error(':'resource $result | string','pg_result_seek(':'resource $result, int $offset | bool','pg_result_status(':'resource $result [, int $type = PGSQL_STATUS_LONG] | mixed','pg_select(':'resource $connection, string $table_name, array $assoc_array [, int $options = PGSQL_DML_EXEC] | mixed','pg_send_execute(':'resource $connection, string $stmtname, array $params | bool','pg_send_prepare(':'resource $connection, string $stmtname, string $query | bool','pg_send_query_params(':'resource $connection, string $query, array $params | bool','pg_send_query(':'resource $connection, string $query | bool','pg_set_client_encoding(':'[ resource $connection [, string $encoding]] | int','pg_set_error_verbosity(':'[ resource $connection [, int $verbosity]] | int','pg_trace(':'string $pathname [, string $mode = "w" [, resource $connection]] | bool','pg_transaction_status(':'resource $connection | int','pg_tty(':'[ resource $connection] | string','pg_unescape_bytea(':'string $data | string','pg_untrace(':'[ resource $connection] | bool','pg_update(':'resource $connection, string $table_name, array $data, array $condition [, int $options = PGSQL_DML_EXEC] | mixed','pg_version(':'[ resource $connection] | array',} +let php_builtin['functions']['pcre']={'preg_filter(':'mixed $pattern, mixed $replacement, mixed $subject [, int $limit = -1 [, int &$count]] | mixed','preg_grep(':'string $pattern, array $input [, int $flags = 0] | array','preg_last_error(':'void | int','preg_match_all(':'string $pattern, string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0]]] | int','preg_match(':'string $pattern, string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0]]] | int','preg_quote(':'string $str [, string $delimiter = NULL] | string','preg_replace_callback(':'mixed $pattern, callable $callback, mixed $subject [, int $limit = -1 [, int &$count]] | mixed','preg_replace(':'mixed $pattern, mixed $replacement, mixed $subject [, int $limit = -1 [, int &$count]] | mixed','preg_split(':'string $pattern, string $subject [, int $limit = -1 [, int $flags = 0]] | array',} +let php_builtin['functions']['sessions']={'session_cache_expire(':'[ string $new_cache_expire] | int','session_cache_limiter(':'[ string $cache_limiter] | string','session_commit(':'session_commit — Alias of session_write_close()','session_decode(':'string $data | bool','session_destroy(':'void | bool','session_encode(':'void | string','session_get_cookie_params(':'void | array','session_id(':'[ string $id] | string','session_is_registered(':'string $name | bool','session_module_name(':'[ string $module] | string','session_name(':'[ string $name] | string','session_regenerate_id(':'[ bool $delete_old_session = false] | bool','session_register_shutdown(':'void | void','session_register(':'mixed $name [, mixed $...] | bool','session_save_path(':'[ string $path] | string','session_set_cookie_params(':'int $lifetime [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false]]]] | void','session_set_save_handler(':'callable $open, callable $close, callable $read, callable $write, callable $destroy, callable $gc | bool','session_start(':'void | bool','session_status(':'void | int','session_unregister(':'string $name | bool','session_unset(':'void | void','session_write_close(':'void | void',} +let php_builtin['functions']['streams']={'set_socket_blocking(':'set_socket_blocking — Alias of stream_set_blocking()','stream_bucket_append(':'resource $brigade, resource $bucket | void','stream_bucket_make_writeable(':'resource $brigade | object','stream_bucket_new(':'resource $stream, string $buffer | object','stream_bucket_prepend(':'resource $brigade, resource $bucket | void','stream_context_create(':'[ array $options [, array $params]] | resource','stream_context_get_default(':'[ array $options] | resource','stream_context_get_options(':'resource $stream_or_context | array','stream_context_get_params(':'resource $stream_or_context | array','stream_context_set_default(':'array $options | resource','stream_context_set_option(':'resource $stream_or_context, string $wrapper, string $option, mixed $value | bool','stream_context_set_params(':'resource $stream_or_context, array $params | bool','stream_copy_to_stream(':'resource $source, resource $dest [, int $maxlength = -1 [, int $offset = 0]] | int','stream_encoding(':'resource $stream [, string $encoding] | bool','stream_filter_append(':'resource $stream, string $filtername [, int $read_write [, mixed $params]] | resource','stream_filter_prepend(':'resource $stream, string $filtername [, int $read_write [, mixed $params]] | resource','stream_filter_register(':'string $filtername, string $classname | bool','stream_filter_remove(':'resource $stream_filter | bool','stream_get_contents(':'resource $handle [, int $maxlength = -1 [, int $offset = -1]] | string','stream_get_filters(':'void | array','stream_get_line(':'resource $handle, int $length [, string $ending] | string','stream_get_meta_data(':'resource $stream | array','stream_get_transports(':'void | array','stream_get_wrappers(':'void | array','stream_is_local(':'mixed $stream_or_url | bool','stream_notification_callback(':'int $notification_code, int $severity, string $message, int $message_code, int $bytes_transferred, int $bytes_max | void','stream_resolve_include_path(':'string $filename | string','stream_select(':'array &$read, array &$write, array &$except, int $tv_sec [, int $tv_usec = 0] | int','stream_set_blocking(':'resource $stream, int $mode | bool','stream_set_chunk_size(':'resource $fp, int $chunk_size | int','stream_set_read_buffer(':'resource $stream, int $buffer | int','stream_set_timeout(':'resource $stream, int $seconds [, int $microseconds = 0] | bool','stream_set_write_buffer(':'resource $stream, int $buffer | int','stream_socket_accept(':'resource $server_socket [, float $timeout = ini_get("default_socket_timeout") [, string &$peername]] | resource','stream_socket_client(':'string $remote_socket [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") [, int $flags = STREAM_CLIENT_CONNECT [, resource $context]]]]] | resource','stream_socket_enable_crypto(':'resource $stream, bool $enable [, int $crypto_type [, resource $session_stream]] | mixed','stream_socket_get_name(':'resource $handle, bool $want_peer | string','stream_socket_pair(':'int $domain, int $type, int $protocol | array','stream_socket_recvfrom(':'resource $socket, int $length [, int $flags = 0 [, string &$address]] | string','stream_socket_sendto(':'resource $socket, string $data [, int $flags = 0 [, string $address]] | int','stream_socket_server(':'string $local_socket [, int &$errno [, string &$errstr [, int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN [, resource $context]]]] | resource','stream_socket_shutdown(':'resource $stream, int $how | bool','stream_supports_lock(':'resource $stream | bool','stream_wrapper_register(':'string $protocol, string $classname [, int $flags = 0] | bool','stream_wrapper_restore(':'string $protocol | bool','stream_wrapper_unregister(':'string $protocol | bool',} +let php_builtin['functions']['simplexml']={'simplexml_import_dom(':'DOMNode $node [, string $class_name = "SimpleXMLElement"] | SimpleXMLElement','simplexml_load_file(':'string $filename [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false]]]] | SimpleXMLElement','simplexml_load_string(':'string $data [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false]]]] | SimpleXMLElement',} +let php_builtin['functions']['xmlwriter']={'xmlwriter_end_attribute(':'resource $xmlwriter | bool','xmlwriter_end_cdata(':'resource $xmlwriter | bool','xmlwriter_end_comment(':'resource $xmlwriter | bool','xmlwriter_end_document(':'resource $xmlwriter | bool','xmlwriter_end_dtd_attlist(':'resource $xmlwriter | bool','xmlwriter_end_dtd_element(':'resource $xmlwriter | bool','xmlwriter_end_dtd_entity(':'resource $xmlwriter | bool','xmlwriter_end_dtd(':'resource $xmlwriter | bool','xmlwriter_end_element(':'resource $xmlwriter | bool','xmlwriter_end_pi(':'resource $xmlwriter | bool','xmlwriter_flush(':'resource $xmlwriter [, bool $empty = true] | mixed','xmlwriter_full_end_element(':'resource $xmlwriter | bool','xmlwriter_open_memory(':'void | resource','xmlwriter_open_uri(':'string $uri | resource','xmlwriter_output_memory(':'resource $xmlwriter [, bool $flush = true] | string','xmlwriter_set_indent_string(':'resource $xmlwriter, string $indentString | bool','xmlwriter_set_indent(':'resource $xmlwriter, bool $indent | bool','xmlwriter_start_attribute_ns(':'resource $xmlwriter, string $prefix, string $name, string $uri | bool','xmlwriter_start_attribute(':'resource $xmlwriter, string $name | bool','xmlwriter_start_cdata(':'resource $xmlwriter | bool','xmlwriter_start_comment(':'resource $xmlwriter | bool','xmlwriter_start_document(':'resource $xmlwriter [, string $version = 1.0 [, string $encoding = NULL [, string $standalone]]] | bool','xmlwriter_start_dtd_attlist(':'resource $xmlwriter, string $name | bool','xmlwriter_start_dtd_element(':'resource $xmlwriter, string $qualifiedName | bool','xmlwriter_start_dtd_entity(':'resource $xmlwriter, string $name, bool $isparam | bool','xmlwriter_start_dtd(':'resource $xmlwriter, string $qualifiedName [, string $publicId [, string $systemId]] | bool','xmlwriter_start_element_ns(':'resource $xmlwriter, string $prefix, string $name, string $uri | bool','xmlwriter_start_element(':'resource $xmlwriter, string $name | bool','xmlwriter_start_pi(':'resource $xmlwriter, string $target | bool','xmlwriter_text(':'resource $xmlwriter, string $content | bool','xmlwriter_write_attribute_ns(':'resource $xmlwriter, string $prefix, string $name, string $uri, string $content | bool','xmlwriter_write_attribute(':'resource $xmlwriter, string $name, string $value | bool','xmlwriter_write_cdata(':'resource $xmlwriter, string $content | bool','xmlwriter_write_comment(':'resource $xmlwriter, string $content | bool','xmlwriter_write_dtd_attlist(':'resource $xmlwriter, string $name, string $content | bool','xmlwriter_write_dtd_element(':'resource $xmlwriter, string $name, string $content | bool','xmlwriter_write_dtd_entity(':'resource $xmlwriter, string $name, string $content, bool $pe, string $pubid, string $sysid, string $ndataid | bool','xmlwriter_write_dtd(':'resource $xmlwriter, string $name [, string $publicId [, string $systemId [, string $subset]]] | bool','xmlwriter_write_element_ns(':'resource $xmlwriter, string $prefix, string $name, string $uri [, string $content] | bool','xmlwriter_write_element(':'resource $xmlwriter, string $name [, string $content] | bool','xmlwriter_write_pi(':'resource $xmlwriter, string $target, string $content | bool','xmlwriter_write_raw(':'resource $xmlwriter, string $content | bool',} +let php_builtin['functions']['zip']={'zip_close(':'resource $zip | void','zip_entry_close(':'resource $zip_entry | bool','zip_entry_compressedsize(':'resource $zip_entry | int','zip_entry_compressionmethod(':'resource $zip_entry | string','zip_entry_filesize(':'resource $zip_entry | int','zip_entry_name(':'resource $zip_entry | string','zip_entry_open(':'resource $zip, resource $zip_entry [, string $mode] | bool','zip_entry_read(':'resource $zip_entry [, int $length = 1024] | string','zip_open(':'string $filename | resource','zip_read(':'resource $zip | resource',} +let php_builtin['classes']['spl']={'appenditerator':{'name':'AppendIterator','methods':{'__construct':{'signature':'Traversable $iterator','return_type':''},'append':{'signature':'Iterator $iterator | void','return_type':'void'},'current':{'signature':'void | mixed','return_type':'mixed'},'getArrayIterator':{'signature':'void | void','return_type':'void'},'getInnerIterator':{'signature':'void | Traversable','return_type':'Traversable'},'getIteratorIndex':{'signature':'void | int','return_type':'int'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'arrayiterator':{'name':'ArrayIterator','methods':{'append':{'signature':'mixed $value | void','return_type':'void'},'asort':{'signature':'void | void','return_type':'void'},'__construct':{'signature':'[ mixed $array = array() [, int $flags = 0]]','return_type':''},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getArrayCopy':{'signature':'void | array','return_type':'array'},'getFlags':{'signature':'void | void','return_type':'void'},'key':{'signature':'void | mixed','return_type':'mixed'},'ksort':{'signature':'void | void','return_type':'void'},'natcasesort':{'signature':'void | void','return_type':'void'},'natsort':{'signature':'void | void','return_type':'void'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'string $index | void','return_type':'void'},'offsetGet':{'signature':'string $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'string $index, string $newval | void','return_type':'void'},'offsetUnset':{'signature':'string $index | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'seek':{'signature':'int $position | void','return_type':'void'},'serialize':{'signature':'void | string','return_type':'string'},'setFlags':{'signature':'string $flags | void','return_type':'void'},'uasort':{'signature':'string $cmp_function | void','return_type':'void'},'uksort':{'signature':'string $cmp_function | void','return_type':'void'},'unserialize':{'signature':'string $serialized | string','return_type':'string'},'valid':{'signature':'void | bool','return_type':'bool'},},},'arrayobject':{'name':'ArrayObject','constants':{'STD_PROP_LIST':'1','ARRAY_AS_PROPS':'2',},'methods':{'__construct':{'signature':'[ mixed $input = [] [, int $flags = 0 [, string $iterator_class = "ArrayIterator"]]]','return_type':''},'append':{'signature':'mixed $value | void','return_type':'void'},'asort':{'signature':'void | void','return_type':'void'},'count':{'signature':'void | int','return_type':'int'},'exchangeArray':{'signature':'mixed $input | array','return_type':'array'},'getArrayCopy':{'signature':'void | array','return_type':'array'},'getFlags':{'signature':'void | int','return_type':'int'},'getIterator':{'signature':'void | ArrayIterator','return_type':'ArrayIterator'},'getIteratorClass':{'signature':'void | string','return_type':'string'},'ksort':{'signature':'void | void','return_type':'void'},'natcasesort':{'signature':'void | void','return_type':'void'},'natsort':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'mixed $index | bool','return_type':'bool'},'offsetGet':{'signature':'mixed $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'mixed $index, mixed $newval | void','return_type':'void'},'offsetUnset':{'signature':'mixed $index | void','return_type':'void'},'serialize':{'signature':'void | void','return_type':'void'},'setFlags':{'signature':'int $flags | void','return_type':'void'},'setIteratorClass':{'signature':'string $iterator_class | void','return_type':'void'},'uasort':{'signature':'callable $cmp_function | void','return_type':'void'},'uksort':{'signature':'callable $cmp_function | void','return_type':'void'},'unserialize':{'signature':'string $serialized | void','return_type':'void'},},},'badfunctioncallexception':{'name':'BadFunctionCallException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'badmethodcallexception':{'name':'BadMethodCallException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'cachingiterator':{'name':'CachingIterator','constants':{'CALL_TOSTRING':'1','CATCH_GET_CHILD':'16','TOSTRING_USE_KEY':'2','TOSTRING_USE_CURRENT':'4','TOSTRING_USE_INNER':'8','FULL_CACHE':'256',},'methods':{'__construct':{'signature':'Iterator $iterator [, string $flags = self::CALL_TOSTRING]','return_type':''},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | void','return_type':'void'},'getCache':{'signature':'void | void','return_type':'void'},'getFlags':{'signature':'void | void','return_type':'void'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'hasNext':{'signature':'void | void','return_type':'void'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'string $index | void','return_type':'void'},'offsetGet':{'signature':'string $index | void','return_type':'void'},'offsetSet':{'signature':'string $index, string $newval | void','return_type':'void'},'offsetUnset':{'signature':'string $index | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setFlags':{'signature':'bitmask $flags | void','return_type':'void'},'__toString':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | void','return_type':'void'},},},'callbackfilteriterator':{'name':'CallbackFilterIterator','methods':{'__construct':{'signature':'Iterator $iterator','return_type':''},'accept':{'signature':'void | bool','return_type':'bool'},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'directoryiterator':{'name':'DirectoryIterator','methods':{'__construct':{'signature':'string $path','return_type':''},'current':{'signature':'void | DirectoryIterator','return_type':'DirectoryIterator'},'getATime':{'signature':'void | int','return_type':'int'},'getBasename':{'signature':'[ string $suffix] | string','return_type':'string'},'getCTime':{'signature':'void | int','return_type':'int'},'getExtension':{'signature':'void | string','return_type':'string'},'getFilename':{'signature':'void | string','return_type':'string'},'getGroup':{'signature':'void | int','return_type':'int'},'getInode':{'signature':'void | int','return_type':'int'},'getMTime':{'signature':'void | int','return_type':'int'},'getOwner':{'signature':'void | int','return_type':'int'},'getPath':{'signature':'void | string','return_type':'string'},'getPathname':{'signature':'void | string','return_type':'string'},'getPerms':{'signature':'void | int','return_type':'int'},'getSize':{'signature':'void | int','return_type':'int'},'getType':{'signature':'void | string','return_type':'string'},'isDir':{'signature':'void | bool','return_type':'bool'},'isDot':{'signature':'void | bool','return_type':'bool'},'isExecutable':{'signature':'void | bool','return_type':'bool'},'isFile':{'signature':'void | bool','return_type':'bool'},'isLink':{'signature':'void | bool','return_type':'bool'},'isReadable':{'signature':'void | bool','return_type':'bool'},'isWritable':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | string','return_type':'string'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'seek':{'signature':'int $position | void','return_type':'void'},'__toString':{'signature':'void | string','return_type':'string'},'valid':{'signature':'void | bool','return_type':'bool'},},},'domainexception':{'name':'DomainException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'emptyiterator':{'name':'EmptyIterator','methods':{'current':{'signature':'void | void','return_type':'void'},'key':{'signature':'void | void','return_type':'void'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | void','return_type':'void'},},},'filesystemiterator':{'name':'FilesystemIterator','constants':{'CURRENT_AS_PATHNAME':'32','CURRENT_AS_FILEINFO':'0','CURRENT_AS_SELF':'16','CURRENT_MODE_MASK':'240','KEY_AS_PATHNAME':'0','KEY_AS_FILENAME':'256','FOLLOW_SYMLINKS':'512','KEY_MODE_MASK':'3840','NEW_CURRENT_AND_KEY':'256','SKIP_DOTS':'4096','UNIX_PATHS':'8192',},'methods':{'__construct':{'signature':'string $path [, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS]','return_type':''},'current':{'signature':'void | DirectoryIterator','return_type':'DirectoryIterator'},'getFlags':{'signature':'void | int','return_type':'int'},'key':{'signature':'void | string','return_type':'string'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setFlags':{'signature':'[ int $flags] | void','return_type':'void'},'getATime':{'signature':'void | int','return_type':'int'},'getBasename':{'signature':'[ string $suffix] | string','return_type':'string'},'getCTime':{'signature':'void | int','return_type':'int'},'getExtension':{'signature':'void | string','return_type':'string'},'getFilename':{'signature':'void | string','return_type':'string'},'getGroup':{'signature':'void | int','return_type':'int'},'getInode':{'signature':'void | int','return_type':'int'},'getMTime':{'signature':'void | int','return_type':'int'},'getOwner':{'signature':'void | int','return_type':'int'},'getPath':{'signature':'void | string','return_type':'string'},'getPathname':{'signature':'void | string','return_type':'string'},'getPerms':{'signature':'void | int','return_type':'int'},'getSize':{'signature':'void | int','return_type':'int'},'getType':{'signature':'void | string','return_type':'string'},'isDir':{'signature':'void | bool','return_type':'bool'},'isDot':{'signature':'void | bool','return_type':'bool'},'isExecutable':{'signature':'void | bool','return_type':'bool'},'isFile':{'signature':'void | bool','return_type':'bool'},'isLink':{'signature':'void | bool','return_type':'bool'},'isReadable':{'signature':'void | bool','return_type':'bool'},'isWritable':{'signature':'void | bool','return_type':'bool'},'seek':{'signature':'int $position | void','return_type':'void'},'__toString':{'signature':'void | string','return_type':'string'},'valid':{'signature':'void | bool','return_type':'bool'},},},'filteriterator':{'name':'FilterIterator','methods':{'accept':{'signature':'void | bool','return_type':'bool'},'__construct':{'signature':'Iterator $iterator','return_type':''},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'globiterator':{'name':'GlobIterator','methods':{'__construct':{'signature':'string $path [, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS]','return_type':''},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getFlags':{'signature':'void | int','return_type':'int'},'key':{'signature':'void | string','return_type':'string'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setFlags':{'signature':'[ int $flags] | void','return_type':'void'},},},'infiniteiterator':{'name':'InfiniteIterator','methods':{'__construct':{'signature':'Traversable $iterator','return_type':''},'next':{'signature':'void | void','return_type':'void'},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Traversable','return_type':'Traversable'},'key':{'signature':'void | scalar','return_type':'scalar'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'invalidargumentexception':{'name':'InvalidArgumentException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'iteratoriterator':{'name':'IteratorIterator','methods':{'__construct':{'signature':'Traversable $iterator','return_type':''},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Traversable','return_type':'Traversable'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'lengthexception':{'name':'LengthException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'limititerator':{'name':'LimitIterator','methods':{'__construct':{'signature':'Iterator $iterator [, int $offset = 0 [, int $count = -1]]','return_type':''},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'getPosition':{'signature':'void | int','return_type':'int'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'seek':{'signature':'int $position | int','return_type':'int'},'valid':{'signature':'void | bool','return_type':'bool'},},},'logicexception':{'name':'LogicException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'multipleiterator':{'name':'MultipleIterator','constants':{'MIT_NEED_ANY':'0','MIT_NEED_ALL':'1','MIT_KEYS_NUMERIC':'0','MIT_KEYS_ASSOC':'2',},'methods':{'__construct':{'signature':'[ int $flags = MultipleIterator::MIT_NEED_ALL|MultipleIterator::MIT_KEYS_NUMERIC]','return_type':''},'attachIterator':{'signature':'Iterator $iterator [, string $infos] | void','return_type':'void'},'containsIterator':{'signature':'Iterator $iterator | void','return_type':'void'},'countIterators':{'signature':'void | void','return_type':'void'},'current':{'signature':'void | array','return_type':'array'},'detachIterator':{'signature':'Iterator $iterator | void','return_type':'void'},'getFlags':{'signature':'void | void','return_type':'void'},'key':{'signature':'void | array','return_type':'array'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setFlags':{'signature':'int $flags | void','return_type':'void'},'valid':{'signature':'void | void','return_type':'void'},},},'norewinditerator':{'name':'NoRewindIterator','methods':{'__construct':{'signature':'Traversable $iterator','return_type':''},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Traversable','return_type':'Traversable'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'outofboundsexception':{'name':'OutOfBoundsException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'outofrangeexception':{'name':'OutOfRangeException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'overflowexception':{'name':'OverflowException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'parentiterator':{'name':'ParentIterator','methods':{'accept':{'signature':'void | bool','return_type':'bool'},'__construct':{'signature':'RecursiveIterator $iterator','return_type':''},'getChildren':{'signature':'void | ParentIterator','return_type':'ParentIterator'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},},},'rangeexception':{'name':'RangeException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'recursivearrayiterator':{'name':'RecursiveArrayIterator','methods':{'getChildren':{'signature':'void | RecursiveArrayIterator','return_type':'RecursiveArrayIterator'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'append':{'signature':'mixed $value | void','return_type':'void'},'asort':{'signature':'void | void','return_type':'void'},'__construct':{'signature':'[ mixed $array = array() [, int $flags = 0]]','return_type':''},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getArrayCopy':{'signature':'void | array','return_type':'array'},'getFlags':{'signature':'void | void','return_type':'void'},'key':{'signature':'void | mixed','return_type':'mixed'},'ksort':{'signature':'void | void','return_type':'void'},'natcasesort':{'signature':'void | void','return_type':'void'},'natsort':{'signature':'void | void','return_type':'void'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'string $index | void','return_type':'void'},'offsetGet':{'signature':'string $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'string $index, string $newval | void','return_type':'void'},'offsetUnset':{'signature':'string $index | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'seek':{'signature':'int $position | void','return_type':'void'},'serialize':{'signature':'void | string','return_type':'string'},'setFlags':{'signature':'string $flags | void','return_type':'void'},'uasort':{'signature':'string $cmp_function | void','return_type':'void'},'uksort':{'signature':'string $cmp_function | void','return_type':'void'},'unserialize':{'signature':'string $serialized | string','return_type':'string'},'valid':{'signature':'void | bool','return_type':'bool'},},},'recursivecachingiterator':{'name':'RecursiveCachingIterator','methods':{'__construct':{'signature':'Iterator $iterator [, string $flags = self::CALL_TOSTRING]','return_type':''},'getChildren':{'signature':'void | RecursiveCachingIterator','return_type':'RecursiveCachingIterator'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | void','return_type':'void'},'getCache':{'signature':'void | void','return_type':'void'},'getFlags':{'signature':'void | void','return_type':'void'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'hasNext':{'signature':'void | void','return_type':'void'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'string $index | void','return_type':'void'},'offsetGet':{'signature':'string $index | void','return_type':'void'},'offsetSet':{'signature':'string $index, string $newval | void','return_type':'void'},'offsetUnset':{'signature':'string $index | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setFlags':{'signature':'bitmask $flags | void','return_type':'void'},'__toString':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | void','return_type':'void'},},},'recursivecallbackfilteriterator':{'name':'RecursiveCallbackFilterIterator','methods':{'__construct':{'signature':'RecursiveIterator $iterator, string $callback','return_type':''},'getChildren':{'signature':'void | RecursiveCallbackFilterIterator','return_type':'RecursiveCallbackFilterIterator'},'hasChildren':{'signature':'void | void','return_type':'void'},'accept':{'signature':'void | string','return_type':'string'},},},'recursivedirectoryiterator':{'name':'RecursiveDirectoryIterator','methods':{'__construct':{'signature':'string $path [, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS]','return_type':''},'getChildren':{'signature':'void | mixed','return_type':'mixed'},'getSubPath':{'signature':'void | string','return_type':'string'},'getSubPathname':{'signature':'void | string','return_type':'string'},'hasChildren':{'signature':'[ bool $allow_links = false] | bool','return_type':'bool'},'key':{'signature':'void | string','return_type':'string'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'current':{'signature':'void | mixed','return_type':'mixed'},'getFlags':{'signature':'void | int','return_type':'int'},'setFlags':{'signature':'[ int $flags] | void','return_type':'void'},},},'recursivefilteriterator':{'name':'RecursiveFilterIterator','methods':{'__construct':{'signature':'Iterator $iterator','return_type':''},'getChildren':{'signature':'void | void','return_type':'void'},'hasChildren':{'signature':'void | void','return_type':'void'},'accept':{'signature':'void | bool','return_type':'bool'},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'recursiveiteratoriterator':{'name':'RecursiveIteratorIterator','constants':{'LEAVES_ONLY':'0','SELF_FIRST':'1','CHILD_FIRST':'2','CATCH_GET_CHILD':'16',},'methods':{'beginChildren':{'signature':'void | void','return_type':'void'},'beginIteration':{'signature':'void | void','return_type':'void'},'callGetChildren':{'signature':'void | RecursiveIterator','return_type':'RecursiveIterator'},'callHasChildren':{'signature':'void | bool','return_type':'bool'},'__construct':{'signature':'Traversable $iterator [, int $mode = RecursiveIteratorIterator::LEAVES_ONLY [, int $flags = 0]]','return_type':''},'current':{'signature':'void | mixed','return_type':'mixed'},'endChildren':{'signature':'void | void','return_type':'void'},'endIteration':{'signature':'void | void','return_type':'void'},'getDepth':{'signature':'void | int','return_type':'int'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'getMaxDepth':{'signature':'void | mixed','return_type':'mixed'},'getSubIterator':{'signature':'[ int $level] | RecursiveIterator','return_type':'RecursiveIterator'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'nextElement':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setMaxDepth':{'signature':'[ string $max_depth = -1] | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'recursiveregexiterator':{'name':'RecursiveRegexIterator','methods':{'__construct':{'signature':'RecursiveIterator $iterator, string $regex [, int $mode = self::MATCH [, int $flags = 0 [, int $preg_flags = 0]]]','return_type':''},'getChildren':{'signature':'void | RecursiveIterator','return_type':'RecursiveIterator'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'accept':{'signature':'void | bool','return_type':'bool'},'getFlags':{'signature':'void | int','return_type':'int'},'getMode':{'signature':'void | int','return_type':'int'},'getPregFlags':{'signature':'void | int','return_type':'int'},'getRegex':{'signature':'void | string','return_type':'string'},'setFlags':{'signature':'int $flags | void','return_type':'void'},'setMode':{'signature':'int $mode | void','return_type':'void'},'setPregFlags':{'signature':'int $preg_flags | void','return_type':'void'},},},'recursivetreeiterator':{'name':'RecursiveTreeIterator','constants':{'BYPASS_CURRENT':'4','BYPASS_KEY':'8','PREFIX_LEFT':'0','PREFIX_MID_HAS_NEXT':'1','PREFIX_MID_LAST':'2','PREFIX_END_HAS_NEXT':'3','PREFIX_END_LAST':'4','PREFIX_RIGHT':'5',},'methods':{'beginChildren':{'signature':'void | void','return_type':'void'},'beginIteration':{'signature':'void | void','return_type':'void'},'callGetChildren':{'signature':'void | RecursiveIterator','return_type':'RecursiveIterator'},'callHasChildren':{'signature':'void | bool','return_type':'bool'},'__construct':{'signature':'Traversable $iterator [, int $mode = RecursiveIteratorIterator::LEAVES_ONLY [, int $flags = 0]]','return_type':''},'current':{'signature':'void | mixed','return_type':'mixed'},'endChildren':{'signature':'void | void','return_type':'void'},'endIteration':{'signature':'void | void','return_type':'void'},'getEntry':{'signature':'void | string','return_type':'string'},'getPostfix':{'signature':'void | void','return_type':'void'},'getPrefix':{'signature':'void | string','return_type':'string'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'nextElement':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setPrefixPart':{'signature':'int $part, string $value | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},'getDepth':{'signature':'void | int','return_type':'int'},'getInnerIterator':{'signature':'void | iterator','return_type':'iterator'},'getMaxDepth':{'signature':'void | mixed','return_type':'mixed'},'getSubIterator':{'signature':'[ int $level] | RecursiveIterator','return_type':'RecursiveIterator'},'setMaxDepth':{'signature':'[ string $max_depth = -1] | void','return_type':'void'},},},'regexiterator':{'name':'RegexIterator','constants':{'MATCH':'0','GET_MATCH':'1','ALL_MATCHES':'2','SPLIT':'3','REPLACE':'4','USE_KEY':'1',},'methods':{'__construct':{'signature':'Iterator $iterator','return_type':''},'accept':{'signature':'void | bool','return_type':'bool'},'getFlags':{'signature':'void | int','return_type':'int'},'getMode':{'signature':'void | int','return_type':'int'},'getPregFlags':{'signature':'void | int','return_type':'int'},'getRegex':{'signature':'void | string','return_type':'string'},'setFlags':{'signature':'int $flags | void','return_type':'void'},'setMode':{'signature':'int $mode | void','return_type':'void'},'setPregFlags':{'signature':'int $preg_flags | void','return_type':'void'},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'runtimeexception':{'name':'RuntimeException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'spldoublylinkedlist':{'name':'SplDoublyLinkedList','methods':{'__construct':{'signature':'void','return_type':''},'bottom':{'signature':'void | mixed','return_type':'mixed'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getIteratorMode':{'signature':'void | int','return_type':'int'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'mixed $index | bool','return_type':'bool'},'offsetGet':{'signature':'mixed $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'mixed $index, mixed $newval | void','return_type':'void'},'offsetUnset':{'signature':'mixed $index | void','return_type':'void'},'pop':{'signature':'void | mixed','return_type':'mixed'},'prev':{'signature':'void | void','return_type':'void'},'push':{'signature':'mixed $value | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'serialize':{'signature':'void | string','return_type':'string'},'setIteratorMode':{'signature':'int $mode | void','return_type':'void'},'shift':{'signature':'void | mixed','return_type':'mixed'},'top':{'signature':'void | mixed','return_type':'mixed'},'unserialize':{'signature':'string $serialized | void','return_type':'void'},'unshift':{'signature':'mixed $value | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splfileinfo':{'name':'SplFileInfo','methods':{'__construct':{'signature':'string $file_name','return_type':''},'getATime':{'signature':'void | int','return_type':'int'},'getBasename':{'signature':'[ string $suffix] | string','return_type':'string'},'getCTime':{'signature':'void | int','return_type':'int'},'getExtension':{'signature':'void | string','return_type':'string'},'getFileInfo':{'signature':'[ string $class_name] | SplFileInfo','return_type':'SplFileInfo'},'getFilename':{'signature':'void | string','return_type':'string'},'getGroup':{'signature':'void | int','return_type':'int'},'getInode':{'signature':'void | int','return_type':'int'},'getLinkTarget':{'signature':'void | string','return_type':'string'},'getMTime':{'signature':'void | int','return_type':'int'},'getOwner':{'signature':'void | int','return_type':'int'},'getPath':{'signature':'void | string','return_type':'string'},'getPathInfo':{'signature':'[ string $class_name] | SplFileInfo','return_type':'SplFileInfo'},'getPathname':{'signature':'void | string','return_type':'string'},'getPerms':{'signature':'void | int','return_type':'int'},'getRealPath':{'signature':'void | string','return_type':'string'},'getSize':{'signature':'void | int','return_type':'int'},'getType':{'signature':'void | string','return_type':'string'},'isDir':{'signature':'void | bool','return_type':'bool'},'isExecutable':{'signature':'void | bool','return_type':'bool'},'isFile':{'signature':'void | bool','return_type':'bool'},'isLink':{'signature':'void | bool','return_type':'bool'},'isReadable':{'signature':'void | bool','return_type':'bool'},'isWritable':{'signature':'void | bool','return_type':'bool'},'openFile':{'signature':'[ string $open_mode = r [, bool $use_include_path = false [, resource $context = NULL]]] | SplFileObject','return_type':'SplFileObject'},'setFileClass':{'signature':'[ string $class_name] | void','return_type':'void'},'setInfoClass':{'signature':'[ string $class_name] | void','return_type':'void'},'__toString':{'signature':'void | void','return_type':'void'},},},'splfileobject':{'name':'SplFileObject','constants':{'DROP_NEW_LINE':'1','READ_AHEAD':'2','SKIP_EMPTY':'4','READ_CSV':'8',},'methods':{'__construct':{'signature':'string $file_name','return_type':''},'current':{'signature':'void | string|array','return_type':'string|array'},'eof':{'signature':'void | bool','return_type':'bool'},'fflush':{'signature':'void | bool','return_type':'bool'},'fgetc':{'signature':'void | string','return_type':'string'},'fgetcsv':{'signature':'[ string $delimiter = "," [, string $enclosure = "\"" [, string $escape = "\\"]]] | array','return_type':'array'},'fgets':{'signature':'void | string','return_type':'string'},'fgetss':{'signature':'[ string $allowable_tags] | string','return_type':'string'},'flock':{'signature':'int $operation [, int &$wouldblock] | bool','return_type':'bool'},'fpassthru':{'signature':'void | int','return_type':'int'},'fputcsv':{'signature':'array $fields [, string $delimiter = '','' [, string $enclosure = ''"'']] | int','return_type':'int'},'fscanf':{'signature':'string $format [, mixed &$...] | mixed','return_type':'mixed'},'fseek':{'signature':'int $offset [, int $whence = SEEK_SET] | int','return_type':'int'},'fstat':{'signature':'void | array','return_type':'array'},'ftell':{'signature':'void | int','return_type':'int'},'ftruncate':{'signature':'int $size | bool','return_type':'bool'},'fwrite':{'signature':'string $str [, int $length] | int','return_type':'int'},'getChildren':{'signature':'void | void','return_type':'void'},'getCsvControl':{'signature':'void | array','return_type':'array'},'getFlags':{'signature':'void | int','return_type':'int'},'getMaxLineLen':{'signature':'void | int','return_type':'int'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | int','return_type':'int'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'seek':{'signature':'int $line_pos | void','return_type':'void'},'setCsvControl':{'signature':'[ string $delimiter = "," [, string $enclosure = "\"" [, string $escape = "\\"]]] | void','return_type':'void'},'setFlags':{'signature':'int $flags | void','return_type':'void'},'setMaxLineLen':{'signature':'int $max_len | void','return_type':'void'},'__toString':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},'getATime':{'signature':'void | int','return_type':'int'},'getBasename':{'signature':'[ string $suffix] | string','return_type':'string'},'getCTime':{'signature':'void | int','return_type':'int'},'getExtension':{'signature':'void | string','return_type':'string'},'getFileInfo':{'signature':'[ string $class_name] | SplFileInfo','return_type':'SplFileInfo'},'getFilename':{'signature':'void | string','return_type':'string'},'getGroup':{'signature':'void | int','return_type':'int'},'getInode':{'signature':'void | int','return_type':'int'},'getLinkTarget':{'signature':'void | string','return_type':'string'},'getMTime':{'signature':'void | int','return_type':'int'},'getOwner':{'signature':'void | int','return_type':'int'},'getPath':{'signature':'void | string','return_type':'string'},'getPathInfo':{'signature':'[ string $class_name] | SplFileInfo','return_type':'SplFileInfo'},'getPathname':{'signature':'void | string','return_type':'string'},'getPerms':{'signature':'void | int','return_type':'int'},'getRealPath':{'signature':'void | string','return_type':'string'},'getSize':{'signature':'void | int','return_type':'int'},'getType':{'signature':'void | string','return_type':'string'},'isDir':{'signature':'void | bool','return_type':'bool'},'isExecutable':{'signature':'void | bool','return_type':'bool'},'isFile':{'signature':'void | bool','return_type':'bool'},'isLink':{'signature':'void | bool','return_type':'bool'},'isReadable':{'signature':'void | bool','return_type':'bool'},'isWritable':{'signature':'void | bool','return_type':'bool'},'openFile':{'signature':'[ string $open_mode = r [, bool $use_include_path = false [, resource $context = NULL]]] | SplFileObject','return_type':'SplFileObject'},'setFileClass':{'signature':'[ string $class_name] | void','return_type':'void'},'setInfoClass':{'signature':'[ string $class_name] | void','return_type':'void'},},},'splfixedarray':{'name':'SplFixedArray','methods':{'__construct':{'signature':'[ int $size = 0]','return_type':''},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getSize':{'signature':'void | int','return_type':'int'},'key':{'signature':'void | int','return_type':'int'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'int $index | bool','return_type':'bool'},'offsetGet':{'signature':'int $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'int $index, mixed $newval | void','return_type':'void'},'offsetUnset':{'signature':'int $index | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setSize':{'signature':'int $size | int','return_type':'int'},'toArray':{'signature':'void | array','return_type':'array'},'valid':{'signature':'void | bool','return_type':'bool'},'__wakeup':{'signature':'void | void','return_type':'void'},},'static_methods':{'fromArray':{'signature':'array $array [, bool $save_indexes = true] | SplFixedArray','return_type':'SplFixedArray'},},},'splheap':{'name':'SplHeap','methods':{'__construct':{'signature':'void','return_type':''},'compare':{'signature':'mixed $value1, mixed $value2 | int','return_type':'int'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'extract':{'signature':'void | mixed','return_type':'mixed'},'insert':{'signature':'mixed $value | void','return_type':'void'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'recoverFromCorruption':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'top':{'signature':'void | mixed','return_type':'mixed'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splmaxheap':{'name':'SplMaxHeap','methods':{'compare':{'signature':'mixed $value1, mixed $value2 | int','return_type':'int'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'extract':{'signature':'void | mixed','return_type':'mixed'},'insert':{'signature':'mixed $value | void','return_type':'void'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'recoverFromCorruption':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'top':{'signature':'void | mixed','return_type':'mixed'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splminheap':{'name':'SplMinHeap','methods':{'compare':{'signature':'mixed $value1, mixed $value2 | int','return_type':'int'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'extract':{'signature':'void | mixed','return_type':'mixed'},'insert':{'signature':'mixed $value | void','return_type':'void'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'recoverFromCorruption':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'top':{'signature':'void | mixed','return_type':'mixed'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splobjectstorage':{'name':'SplObjectStorage','methods':{'addAll':{'signature':'SplObjectStorage $storage | void','return_type':'void'},'attach':{'signature':'object $object [, mixed $data = NULL] | void','return_type':'void'},'contains':{'signature':'object $object | bool','return_type':'bool'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | object','return_type':'object'},'detach':{'signature':'object $object | void','return_type':'void'},'getHash':{'signature':'object $object | string','return_type':'string'},'getInfo':{'signature':'void | mixed','return_type':'mixed'},'key':{'signature':'void | int','return_type':'int'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'object $object | bool','return_type':'bool'},'offsetGet':{'signature':'object $object | mixed','return_type':'mixed'},'offsetSet':{'signature':'object $object [, mixed $data = NULL] | void','return_type':'void'},'offsetUnset':{'signature':'object $object | void','return_type':'void'},'removeAll':{'signature':'SplObjectStorage $storage | void','return_type':'void'},'removeAllExcept':{'signature':'SplObjectStorage $storage | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'serialize':{'signature':'void | string','return_type':'string'},'setInfo':{'signature':'mixed $data | void','return_type':'void'},'unserialize':{'signature':'string $serialized | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splpriorityqueue':{'name':'SplPriorityQueue','methods':{'__construct':{'signature':'void','return_type':''},'compare':{'signature':'mixed $priority1, mixed $priority2 | int','return_type':'int'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'extract':{'signature':'void | mixed','return_type':'mixed'},'insert':{'signature':'mixed $value, mixed $priority | void','return_type':'void'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'recoverFromCorruption':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setExtractFlags':{'signature':'int $flags | void','return_type':'void'},'top':{'signature':'void | mixed','return_type':'mixed'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splqueue':{'name':'SplQueue','methods':{'__construct':{'signature':'void','return_type':''},'dequeue':{'signature':'void | mixed','return_type':'mixed'},'enqueue':{'signature':'mixed $value | void','return_type':'void'},'setIteratorMode':{'signature':'int $mode | void','return_type':'void'},'bottom':{'signature':'void | mixed','return_type':'mixed'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getIteratorMode':{'signature':'void | int','return_type':'int'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'mixed $index | bool','return_type':'bool'},'offsetGet':{'signature':'mixed $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'mixed $index, mixed $newval | void','return_type':'void'},'offsetUnset':{'signature':'mixed $index | void','return_type':'void'},'pop':{'signature':'void | mixed','return_type':'mixed'},'prev':{'signature':'void | void','return_type':'void'},'push':{'signature':'mixed $value | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'serialize':{'signature':'void | string','return_type':'string'},'shift':{'signature':'void | mixed','return_type':'mixed'},'top':{'signature':'void | mixed','return_type':'mixed'},'unserialize':{'signature':'string $serialized | void','return_type':'void'},'unshift':{'signature':'mixed $value | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splstack':{'name':'SplStack','methods':{'__construct':{'signature':'void','return_type':''},'setIteratorMode':{'signature':'int $mode | void','return_type':'void'},'bottom':{'signature':'void | mixed','return_type':'mixed'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getIteratorMode':{'signature':'void | int','return_type':'int'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'mixed $index | bool','return_type':'bool'},'offsetGet':{'signature':'mixed $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'mixed $index, mixed $newval | void','return_type':'void'},'offsetUnset':{'signature':'mixed $index | void','return_type':'void'},'pop':{'signature':'void | mixed','return_type':'mixed'},'prev':{'signature':'void | void','return_type':'void'},'push':{'signature':'mixed $value | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'serialize':{'signature':'void | string','return_type':'string'},'shift':{'signature':'void | mixed','return_type':'mixed'},'top':{'signature':'void | mixed','return_type':'mixed'},'unserialize':{'signature':'string $serialized | void','return_type':'void'},'unshift':{'signature':'mixed $value | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'spltempfileobject':{'name':'SplTempFileObject','methods':{'__construct':{'signature':'string $filename [, string $open_mode = "r" [, bool $use_include_path = false [, resource $context]]]','return_type':''},'current':{'signature':'void | string|array','return_type':'string|array'},'eof':{'signature':'void | bool','return_type':'bool'},'fflush':{'signature':'void | bool','return_type':'bool'},'fgetc':{'signature':'void | string','return_type':'string'},'fgetcsv':{'signature':'[ string $delimiter = "," [, string $enclosure = "\"" [, string $escape = "\\"]]] | array','return_type':'array'},'fgets':{'signature':'void | string','return_type':'string'},'fgetss':{'signature':'[ string $allowable_tags] | string','return_type':'string'},'flock':{'signature':'int $operation [, int &$wouldblock] | bool','return_type':'bool'},'fpassthru':{'signature':'void | int','return_type':'int'},'fputcsv':{'signature':'array $fields [, string $delimiter = '','' [, string $enclosure = ''"'']] | int','return_type':'int'},'fscanf':{'signature':'string $format [, mixed &$...] | mixed','return_type':'mixed'},'fseek':{'signature':'int $offset [, int $whence = SEEK_SET] | int','return_type':'int'},'fstat':{'signature':'void | array','return_type':'array'},'ftell':{'signature':'void | int','return_type':'int'},'ftruncate':{'signature':'int $size | bool','return_type':'bool'},'fwrite':{'signature':'string $str [, int $length] | int','return_type':'int'},'getChildren':{'signature':'void | void','return_type':'void'},'getCsvControl':{'signature':'void | array','return_type':'array'},'getFlags':{'signature':'void | int','return_type':'int'},'getMaxLineLen':{'signature':'void | int','return_type':'int'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | int','return_type':'int'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'seek':{'signature':'int $line_pos | void','return_type':'void'},'setCsvControl':{'signature':'[ string $delimiter = "," [, string $enclosure = "\"" [, string $escape = "\\"]]] | void','return_type':'void'},'setFlags':{'signature':'int $flags | void','return_type':'void'},'setMaxLineLen':{'signature':'int $max_len | void','return_type':'void'},'__toString':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'underflowexception':{'name':'UnderflowException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'unexpectedvalueexception':{'name':'UnexpectedValueException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},} +let php_builtin['classes']['predefined_interfaces_and_classes']={'closure':{'name':'Closure','methods':{'__construct':{'signature':'void','return_type':''},'bindTo':{'signature':'object $newthis [, mixed $newscope = ''static''] | Closure','return_type':'Closure'},},'static_methods':{'bind':{'signature':'Closure $closure, object $newthis [, mixed $newscope = ''static''] | Closure','return_type':'Closure'},},},'generator':{'name':'Generator','methods':{'current':{'signature':'void | mixed','return_type':'mixed'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'send':{'signature':'mixed $value | mixed','return_type':'mixed'},'throw':{'signature':'Exception $exception | mixed','return_type':'mixed'},'valid':{'signature':'void | bool','return_type':'bool'},'__wakeup':{'signature':'void | void','return_type':'void'},},},} +let php_builtin['classes']['curl']={'curlfile':{'name':'CURLFile','properties': {'name':{'initializer':'','type':''},'mime':{'initializer':'','type':''},'postname':{'initializer':'','type':''},},'methods':{'__construct':{'signature':'string $filename [, string $mimetype [, string $postname]]','return_type':''},'getFilename':{'signature':'void | string','return_type':'string'},'getMimeType':{'signature':'void | string','return_type':'string'},'getPostFilename':{'signature':'void | string','return_type':'string'},'setMimeType':{'signature':'string $mime | void','return_type':'void'},'setPostFilename':{'signature':'string $postname | void','return_type':'void'},'__wakeup':{'signature':'void | void','return_type':'void'},},},} +let php_builtin['classes']['date_time']={'dateinterval':{'name':'DateInterval','properties': {'y':{'initializer':'','type':'integer'},'m':{'initializer':'','type':'integer'},'d':{'initializer':'','type':'integer'},'h':{'initializer':'','type':'integer'},'i':{'initializer':'','type':'integer'},'s':{'initializer':'','type':'integer'},'invert':{'initializer':'','type':'integer'},'days':{'initializer':'','type':'mixed'},},'methods':{'__construct':{'signature':'string $interval_spec','return_type':''},'format':{'signature':'string $format | string','return_type':'string'},},'static_methods':{'createFromDateString':{'signature':'string $time | DateInterval','return_type':'DateInterval'},},},'dateperiod':{'name':'DatePeriod','constants':{'EXCLUDE_START_DATE':'1',},'methods':{'__construct':{'signature':'string $isostr [, int $options]','return_type':''},},},'datetime':{'name':'DateTime','constants':{'ATOM':'"Y-m-d\TH:i:sP"','COOKIE':'"l, d-M-y H:i:s T"','ISO8601':'"Y-m-d\TH:i:sO"','RFC822':'"D, d M y H:i:s O"','RFC850':'"l, d-M-y H:i:s T"','RFC1036':'"D, d M y H:i:s O"','RFC1123':'"D, d M Y H:i:s O"','RFC2822':'"D, d M Y H:i:s O"','RFC3339':'"Y-m-d\TH:i:sP"','RSS':'"D, d M Y H:i:s O"','W3C':'"Y-m-d\TH:i:sP"',},'methods':{'__construct':{'signature':'[ string $time = "now" [, DateTimeZone $timezone = NULL]]','return_type':''},'add':{'signature':'DateInterval $interval | DateTime','return_type':'DateTime'},'modify':{'signature':'string $modify | DateTime','return_type':'DateTime'},'setDate':{'signature':'int $year, int $month, int $day | DateTime','return_type':'DateTime'},'setISODate':{'signature':'int $year, int $week [, int $day = 1] | DateTime','return_type':'DateTime'},'setTime':{'signature':'int $hour, int $minute [, int $second = 0] | DateTime','return_type':'DateTime'},'setTimestamp':{'signature':'int $unixtimestamp | DateTime','return_type':'DateTime'},'setTimezone':{'signature':'DateTimeZone $timezone | DateTime','return_type':'DateTime'},'sub':{'signature':'DateInterval $interval | DateTime','return_type':'DateTime'},'diff':{'signature':'DateTimeInterface $datetime2 [, bool $absolute = false] | DateInterval','return_type':'DateInterval'},'format':{'signature':'string $format | string','return_type':'string'},'getOffset':{'signature':'void | int','return_type':'int'},'getTimestamp':{'signature':'void | int','return_type':'int'},'getTimezone':{'signature':'void | DateTimeZone','return_type':'DateTimeZone'},'__wakeup':{'signature':'void','return_type':''},},'static_methods':{'createFromFormat':{'signature':'string $format, string $time [, DateTimeZone $timezone] | DateTime','return_type':'DateTime'},'getLastErrors':{'signature':'void | array','return_type':'array'},'__set_state':{'signature':'array $array | DateTime','return_type':'DateTime'},},},'datetimeimmutable':{'name':'DateTimeImmutable','methods':{'__construct':{'signature':'[ string $time = "now" [, DateTimeZone $timezone = NULL]]','return_type':''},'add':{'signature':'DateInterval $interval | DateTimeImmutable','return_type':'DateTimeImmutable'},'modify':{'signature':'string $modify | DateTimeImmutable','return_type':'DateTimeImmutable'},'setDate':{'signature':'int $year, int $month, int $day | DateTimeImmutable','return_type':'DateTimeImmutable'},'setISODate':{'signature':'int $year, int $week [, int $day = 1] | DateTimeImmutable','return_type':'DateTimeImmutable'},'setTime':{'signature':'int $hour, int $minute [, int $second = 0] | DateTimeImmutable','return_type':'DateTimeImmutable'},'setTimestamp':{'signature':'int $unixtimestamp | DateTimeImmutable','return_type':'DateTimeImmutable'},'setTimezone':{'signature':'DateTimeZone $timezone | DateTimeImmutable','return_type':'DateTimeImmutable'},'sub':{'signature':'DateInterval $interval | DateTimeImmutable','return_type':'DateTimeImmutable'},'diff':{'signature':'DateTimeInterface $datetime2 [, bool $absolute = false] | DateInterval','return_type':'DateInterval'},'format':{'signature':'string $format | string','return_type':'string'},'getOffset':{'signature':'void | int','return_type':'int'},'getTimestamp':{'signature':'void | int','return_type':'int'},'getTimezone':{'signature':'void | DateTimeZone','return_type':'DateTimeZone'},'__wakeup':{'signature':'void','return_type':''},},'static_methods':{'createFromFormat':{'signature':'string $format, string $time [, DateTimeZone $timezone] | DateTimeImmutable','return_type':'DateTimeImmutable'},'getLastErrors':{'signature':'void | array','return_type':'array'},'__set_state':{'signature':'array $array | DateTimeImmutable','return_type':'DateTimeImmutable'},},},'datetimezone':{'name':'DateTimeZone','constants':{'AFRICA':'1','AMERICA':'2','ANTARCTICA':'4','ARCTIC':'8','ASIA':'16','ATLANTIC':'32','AUSTRALIA':'64','EUROPE':'128','INDIAN':'256','PACIFIC':'512','UTC':'1024','ALL':'2047','ALL_WITH_BC':'4095','PER_COUNTRY':'4096',},'methods':{'__construct':{'signature':'string $timezone','return_type':''},'getLocation':{'signature':'void | array','return_type':'array'},'getName':{'signature':'void | string','return_type':'string'},'getOffset':{'signature':'DateTime $datetime | int','return_type':'int'},'getTransitions':{'signature':'[ int $timestamp_begin [, int $timestamp_end]] | array','return_type':'array'},},'static_methods':{'listAbbreviations':{'signature':'void | array','return_type':'array'},'listIdentifiers':{'signature':'[ int $what = DateTimeZone::ALL [, string $country = NULL]] | array','return_type':'array'},},},} +let php_builtin['classes']['directories']={'directory':{'name':'Directory','properties': {'path':{'initializer':'','type':'string'},'handle':{'initializer':'','type':'resource'},},'methods':{'close':{'signature':'[ resource $dir_handle] | void','return_type':'void'},'read':{'signature':'[ resource $dir_handle] | string','return_type':'string'},'rewind':{'signature':'[ resource $dir_handle] | void','return_type':'void'},},},} +let php_builtin['classes']['dom']={'domattr':{'name':'DOMAttr','properties': {'name':{'initializer':'','type':'string'},'ownerElement':{'initializer':'','type':'DOMElement'},'schemaTypeInfo':{'initializer':'','type':'bool'},'specified':{'initializer':'','type':'bool'},'value':{'initializer':'','type':'string'},},'methods':{'__construct':{'signature':'string $name [, string $value]','return_type':''},'isId':{'signature':'void | bool','return_type':'bool'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domcdatasection':{'name':'DOMCdataSection','methods':{'__construct':{'signature':'string $value','return_type':''},'isWhitespaceInElementContent':{'signature':'void | bool','return_type':'bool'},'splitText':{'signature':'int $offset | DOMText','return_type':'DOMText'},},},'domcharacterdata':{'name':'DOMCharacterData','properties': {'data':{'initializer':'','type':'string'},'length':{'initializer':'','type':'int'},},'methods':{'appendData':{'signature':'string $data | void','return_type':'void'},'deleteData':{'signature':'int $offset, int $count | void','return_type':'void'},'insertData':{'signature':'int $offset, string $data | void','return_type':'void'},'replaceData':{'signature':'int $offset, int $count, string $data | void','return_type':'void'},'substringData':{'signature':'int $offset, int $count | string','return_type':'string'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domcomment':{'name':'DOMComment','methods':{'__construct':{'signature':'[ string $value]','return_type':''},'appendData':{'signature':'string $data | void','return_type':'void'},'deleteData':{'signature':'int $offset, int $count | void','return_type':'void'},'insertData':{'signature':'int $offset, string $data | void','return_type':'void'},'replaceData':{'signature':'int $offset, int $count, string $data | void','return_type':'void'},'substringData':{'signature':'int $offset, int $count | string','return_type':'string'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domdocument':{'name':'DOMDocument','properties': {'actualEncoding':{'initializer':'','type':'string'},'config':{'initializer':'','type':'DOMConfiguration'},'doctype':{'initializer':'','type':'DOMDocumentType'},'documentElement':{'initializer':'','type':'DOMElement'},'documentURI':{'initializer':'','type':'string'},'encoding':{'initializer':'','type':'string'},'formatOutput':{'initializer':'','type':'bool'},'implementation':{'initializer':'','type':'DOMImplementation'},'preserveWhiteSpace':{'initializer':'true','type':'bool'},'recover':{'initializer':'','type':'bool'},'resolveExternals':{'initializer':'','type':'bool'},'standalone':{'initializer':'','type':'bool'},'strictErrorChecking':{'initializer':'true','type':'bool'},'substituteEntities':{'initializer':'','type':'bool'},'validateOnParse':{'initializer':'false','type':'bool'},'version':{'initializer':'','type':'string'},'xmlEncoding':{'initializer':'','type':'string'},'xmlStandalone':{'initializer':'','type':'bool'},'xmlVersion':{'initializer':'','type':'string'},},'methods':{'__construct':{'signature':'[ string $version [, string $encoding]]','return_type':''},'createAttribute':{'signature':'string $name | DOMAttr','return_type':'DOMAttr'},'createAttributeNS':{'signature':'string $namespaceURI, string $qualifiedName | DOMAttr','return_type':'DOMAttr'},'createCDATASection':{'signature':'string $data | DOMCDATASection','return_type':'DOMCDATASection'},'createComment':{'signature':'string $data | DOMComment','return_type':'DOMComment'},'createDocumentFragment':{'signature':'void | DOMDocumentFragment','return_type':'DOMDocumentFragment'},'createElement':{'signature':'string $name [, string $value] | DOMElement','return_type':'DOMElement'},'createElementNS':{'signature':'string $namespaceURI, string $qualifiedName [, string $value] | DOMElement','return_type':'DOMElement'},'createEntityReference':{'signature':'string $name | DOMEntityReference','return_type':'DOMEntityReference'},'createProcessingInstruction':{'signature':'string $target [, string $data] | DOMProcessingInstruction','return_type':'DOMProcessingInstruction'},'createTextNode':{'signature':'string $content | DOMText','return_type':'DOMText'},'getElementById':{'signature':'string $elementId | DOMElement','return_type':'DOMElement'},'getElementsByTagName':{'signature':'string $name | DOMNodeList','return_type':'DOMNodeList'},'getElementsByTagNameNS':{'signature':'string $namespaceURI, string $localName | DOMNodeList','return_type':'DOMNodeList'},'importNode':{'signature':'DOMNode $importedNode [, bool $deep] | DOMNode','return_type':'DOMNode'},'load':{'signature':'string $filename [, int $options = 0] | mixed','return_type':'mixed'},'loadHTML':{'signature':'string $source [, int $options = 0] | bool','return_type':'bool'},'loadHTMLFile':{'signature':'string $filename [, int $options = 0] | bool','return_type':'bool'},'loadXML':{'signature':'string $source [, int $options = 0] | mixed','return_type':'mixed'},'normalizeDocument':{'signature':'void | void','return_type':'void'},'registerNodeClass':{'signature':'string $baseclass, string $extendedclass | bool','return_type':'bool'},'relaxNGValidate':{'signature':'string $filename | bool','return_type':'bool'},'relaxNGValidateSource':{'signature':'string $source | bool','return_type':'bool'},'save':{'signature':'string $filename [, int $options] | int','return_type':'int'},'saveHTML':{'signature':'[ DOMNode $node = NULL] | string','return_type':'string'},'saveHTMLFile':{'signature':'string $filename | int','return_type':'int'},'saveXML':{'signature':'[ DOMNode $node [, int $options]] | string','return_type':'string'},'schemaValidate':{'signature':'string $filename [, int $flags] | bool','return_type':'bool'},'schemaValidateSource':{'signature':'string $source [, int $flags] | bool','return_type':'bool'},'validate':{'signature':'void | bool','return_type':'bool'},'xinclude':{'signature':'[ int $options] | int','return_type':'int'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domdocumentfragment':{'name':'DOMDocumentFragment','methods':{'appendXML':{'signature':'string $data | bool','return_type':'bool'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domdocumenttype':{'name':'DOMDocumentType','properties': {'publicId':{'initializer':'','type':'string'},'systemId':{'initializer':'','type':'string'},'name':{'initializer':'','type':'string'},'entities':{'initializer':'','type':'DOMNamedNodeMap'},'notations':{'initializer':'','type':'DOMNamedNodeMap'},'internalSubset':{'initializer':'','type':'string'},},'methods':{'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domelement':{'name':'DOMElement','properties': {'schemaTypeInfo':{'initializer':'','type':'bool'},'tagName':{'initializer':'','type':'string'},},'methods':{'__construct':{'signature':'string $name [, string $value [, string $namespaceURI]]','return_type':''},'getAttribute':{'signature':'string $name | string','return_type':'string'},'getAttributeNode':{'signature':'string $name | DOMAttr','return_type':'DOMAttr'},'getAttributeNodeNS':{'signature':'string $namespaceURI, string $localName | DOMAttr','return_type':'DOMAttr'},'getAttributeNS':{'signature':'string $namespaceURI, string $localName | string','return_type':'string'},'getElementsByTagName':{'signature':'string $name | DOMNodeList','return_type':'DOMNodeList'},'getElementsByTagNameNS':{'signature':'string $namespaceURI, string $localName | DOMNodeList','return_type':'DOMNodeList'},'hasAttribute':{'signature':'string $name | bool','return_type':'bool'},'hasAttributeNS':{'signature':'string $namespaceURI, string $localName | bool','return_type':'bool'},'removeAttribute':{'signature':'string $name | bool','return_type':'bool'},'removeAttributeNode':{'signature':'DOMAttr $oldnode | bool','return_type':'bool'},'removeAttributeNS':{'signature':'string $namespaceURI, string $localName | bool','return_type':'bool'},'setAttribute':{'signature':'string $name, string $value | DOMAttr','return_type':'DOMAttr'},'setAttributeNode':{'signature':'DOMAttr $attr | DOMAttr','return_type':'DOMAttr'},'setAttributeNodeNS':{'signature':'DOMAttr $attr | DOMAttr','return_type':'DOMAttr'},'setAttributeNS':{'signature':'string $namespaceURI, string $qualifiedName, string $value | void','return_type':'void'},'setIdAttribute':{'signature':'string $name, bool $isId | void','return_type':'void'},'setIdAttributeNode':{'signature':'DOMAttr $attr, bool $isId | void','return_type':'void'},'setIdAttributeNS':{'signature':'string $namespaceURI, string $localName, bool $isId | void','return_type':'void'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domentity':{'name':'DOMEntity','properties': {'publicId':{'initializer':'','type':'string'},'systemId':{'initializer':'','type':'string'},'notationName':{'initializer':'','type':'string'},'actualEncoding':{'initializer':'','type':'string'},'encoding':{'initializer':'','type':'string'},'version':{'initializer':'','type':'string'},},'methods':{'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domentityreference':{'name':'DOMEntityReference','methods':{'__construct':{'signature':'string $name','return_type':''},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domexception':{'name':'DOMException','properties': {'code':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'domimplementation':{'name':'DOMImplementation','methods':{'__construct':{'signature':'void','return_type':''},'createDocument':{'signature':'[ string $namespaceURI = NULL [, string $qualifiedName = NULL [, DOMDocumentType $doctype = NULL]]] | DOMDocument','return_type':'DOMDocument'},'createDocumentType':{'signature':'[ string $qualifiedName = NULL [, string $publicId = NULL [, string $systemId = NULL]]] | DOMDocumentType','return_type':'DOMDocumentType'},'hasFeature':{'signature':'string $feature, string $version | bool','return_type':'bool'},},},'domnamednodemap':{'name':'DOMNamedNodeMap','properties': {'length':{'initializer':'','type':'int'},},'methods':{'getNamedItem':{'signature':'string $name | DOMNode','return_type':'DOMNode'},'getNamedItemNS':{'signature':'string $namespaceURI, string $localName | DOMNode','return_type':'DOMNode'},'item':{'signature':'int $index | DOMNode','return_type':'DOMNode'},},},'domnode':{'name':'DOMNode','properties': {'nodeName':{'initializer':'','type':'string'},'nodeValue':{'initializer':'','type':'string'},'nodeType':{'initializer':'','type':'int'},'parentNode':{'initializer':'','type':'DOMNode'},'childNodes':{'initializer':'','type':'DOMNodeList'},'firstChild':{'initializer':'','type':'DOMNode'},'lastChild':{'initializer':'','type':'DOMNode'},'previousSibling':{'initializer':'','type':'DOMNode'},'nextSibling':{'initializer':'','type':'DOMNode'},'attributes':{'initializer':'','type':'DOMNamedNodeMap'},'ownerDocument':{'initializer':'','type':'DOMDocument'},'namespaceURI':{'initializer':'','type':'string'},'prefix':{'initializer':'','type':'string'},'localName':{'initializer':'','type':'string'},'baseURI':{'initializer':'','type':'string'},'textContent':{'initializer':'','type':'string'},},'methods':{'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domnodelist':{'name':'DOMNodeList','properties': {'length':{'initializer':'','type':'int'},},'methods':{'item':{'signature':'int $index | DOMNode','return_type':'DOMNode'},},},'domnotation':{'name':'DOMNotation','properties': {'publicId':{'initializer':'','type':'string'},'systemId':{'initializer':'','type':'string'},},'methods':{'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domprocessinginstruction':{'name':'DOMProcessingInstruction','properties': {'target':{'initializer':'','type':'string'},'data':{'initializer':'','type':'string'},},'methods':{'__construct':{'signature':'string $name [, string $value]','return_type':''},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domtext':{'name':'DOMText','properties': {'wholeText':{'initializer':'','type':'string'},},'methods':{'__construct':{'signature':'[ string $value]','return_type':''},'isWhitespaceInElementContent':{'signature':'void | bool','return_type':'bool'},'splitText':{'signature':'int $offset | DOMText','return_type':'DOMText'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domxpath':{'name':'DOMXPath','properties': {'document':{'initializer':'','type':'DOMDocument'},},'methods':{'__construct':{'signature':'DOMDocument $doc','return_type':''},'evaluate':{'signature':'string $expression [, DOMNode $contextnode [, bool $registerNodeNS = true]] | mixed','return_type':'mixed'},'query':{'signature':'string $expression [, DOMNode $contextnode [, bool $registerNodeNS = true]] | DOMNodeList','return_type':'DOMNodeList'},'registerNamespace':{'signature':'string $prefix, string $namespaceURI | bool','return_type':'bool'},'registerPhpFunctions':{'signature':'[ mixed $restrict] | void','return_type':'void'},},},} +let php_builtin['classes']['predefined_exceptions']={'errorexception':{'name':'ErrorException','properties': {'severity':{'initializer':'','type':'int'},'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'__construct':{'signature':'[ string $message = "" [, int $code = 0 [, int $severity = 1 [, string $filename = __FILE__ [, int $lineno = __LINE__ [, Exception $previous = NULL]]]]]]','return_type':''},'getSeverity':{'signature':'void | int','return_type':'int'},'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'exception':{'name':'Exception','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'__construct':{'signature':'[ string $message = "" [, int $code = 0 [, Exception $previous = NULL]]]','return_type':''},'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},} +let php_builtin['classes']['libxml']={'libxmlerror':{'name':'libXMLError','properties': {'level':{'initializer':'','type':'int'},'code':{'initializer':'','type':'int'},'column':{'initializer':'','type':'int'},'message':{'initializer':'','type':'string'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},},} +let php_builtin['classes']['mysqli']={'mysqli_driver':{'name':'mysqli_driver','properties': {'client_info':{'initializer':'','type':'string'},'client_version':{'initializer':'','type':'string'},'driver_version':{'initializer':'','type':'string'},'embedded':{'initializer':'','type':'string'},'reconnect':{'initializer':'','type':'bool'},'report_mode':{'initializer':'','type':'int'},},'methods':{'embedded_server_end':{'signature':'void | void','return_type':'void'},'embedded_server_start':{'signature':'bool $start, array $arguments, array $groups | bool','return_type':'bool'},},},'mysqli_result':{'name':'mysqli_result','properties': {'current_field':{'initializer':'','type':'int'},'field_count':{'initializer':'','type':'int'},'lengths':{'initializer':'','type':'array'},'num_rows':{'initializer':'','type':'int'},},'methods':{'data_seek':{'signature':'int $offset | bool','return_type':'bool'},'fetch_all':{'signature':'[ int $resulttype = MYSQLI_NUM] | mixed','return_type':'mixed'},'fetch_array':{'signature':'[ int $resulttype = MYSQLI_BOTH] | mixed','return_type':'mixed'},'fetch_assoc':{'signature':'void | array','return_type':'array'},'fetch_field_direct':{'signature':'int $fieldnr | object','return_type':'object'},'fetch_field':{'signature':'void | object','return_type':'object'},'fetch_fields':{'signature':'void | array','return_type':'array'},'fetch_object':{'signature':'[ string $class_name [, array $params]] | object','return_type':'object'},'fetch_row':{'signature':'void | mixed','return_type':'mixed'},'field_seek':{'signature':'int $fieldnr | bool','return_type':'bool'},'free':{'signature':'void | void','return_type':'void'},},},'mysqli_sql_exception':{'name':'mysqli_sql_exception','properties': {'sqlstate':{'initializer':'','type':'string'},'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},},'mysqli_stmt':{'name':'mysqli_stmt','properties': {'affected_rows':{'initializer':'','type':'int'},'errno':{'initializer':'','type':'int'},'error_list':{'initializer':'','type':'array'},'error':{'initializer':'','type':'string'},'field_count':{'initializer':'','type':'int'},'insert_id':{'initializer':'','type':'int'},'num_rows':{'initializer':'','type':'int'},'param_count':{'initializer':'','type':'int'},'sqlstate':{'initializer':'','type':'string'},},'methods':{'attr_get':{'signature':'int $attr | int','return_type':'int'},'attr_set':{'signature':'int $attr, int $mode | bool','return_type':'bool'},'bind_param':{'signature':'string $types, mixed &$var1 [, mixed &$...] | bool','return_type':'bool'},'bind_result':{'signature':'mixed &$var1 [, mixed &$...] | bool','return_type':'bool'},'close':{'signature':'void | bool','return_type':'bool'},'data_seek':{'signature':'int $offset | void','return_type':'void'},'execute':{'signature':'void | bool','return_type':'bool'},'fetch':{'signature':'void | bool','return_type':'bool'},'free_result':{'signature':'void | void','return_type':'void'},'get_result':{'signature':'void | mysqli_result','return_type':'mysqli_result'},'get_warnings':{'signature':'mysqli_stmt $stmt | object','return_type':'object'},'prepare':{'signature':'string $query | mixed','return_type':'mixed'},'reset':{'signature':'void | bool','return_type':'bool'},'result_metadata':{'signature':'void | mysqli_result','return_type':'mysqli_result'},'send_long_data':{'signature':'int $param_nr, string $data | bool','return_type':'bool'},'store_result':{'signature':'void | bool','return_type':'bool'},},},'mysqli_warning':{'name':'mysqli_warning','properties': {'message':{'initializer':'','type':''},'sqlstate':{'initializer':'','type':''},'errno':{'initializer':'','type':''},},'methods':{'__construct':{'signature':'void','return_type':''},'next':{'signature':'void | void','return_type':'void'},},},'mysqli':{'name':'mysqli','properties': {'affected_rows':{'initializer':'','type':'int'},'client_info':{'initializer':'','type':'string'},'client_version':{'initializer':'','type':'int'},'connect_errno':{'initializer':'','type':'string'},'connect_error':{'initializer':'','type':'string'},'errno':{'initializer':'','type':'int'},'error_list':{'initializer':'','type':'array'},'error':{'initializer':'','type':'string'},'field_count':{'initializer':'','type':'int'},'host_info':{'initializer':'','type':'string'},'protocol_version':{'initializer':'','type':'string'},'server_info':{'initializer':'','type':'string'},'server_version':{'initializer':'','type':'int'},'info':{'initializer':'','type':'string'},'insert_id':{'initializer':'','type':'mixed'},'sqlstate':{'initializer':'','type':'string'},'thread_id':{'initializer':'','type':'int'},'warning_count':{'initializer':'','type':'int'},},'methods':{'__construct':{'signature':'[ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $passwd = ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket = ini_get("mysqli.default_socket")]]]]]]','return_type':''},'autocommit':{'signature':'bool $mode | bool','return_type':'bool'},'change_user':{'signature':'string $user, string $password, string $database | bool','return_type':'bool'},'character_set_name':{'signature':'void | string','return_type':'string'},'close':{'signature':'void | bool','return_type':'bool'},'commit':{'signature':'[ int $flags [, string $name]] | bool','return_type':'bool'},'debug':{'signature':'string $message | bool','return_type':'bool'},'dump_debug_info':{'signature':'void | bool','return_type':'bool'},'get_charset':{'signature':'void | object','return_type':'object'},'get_client_info':{'signature':'void | string','return_type':'string'},'get_connection_stats':{'signature':'void | bool','return_type':'bool'},'get_warnings':{'signature':'void | mysqli_warning','return_type':'mysqli_warning'},'init':{'signature':'void | mysqli','return_type':'mysqli'},'kill':{'signature':'int $processid | bool','return_type':'bool'},'more_results':{'signature':'void | bool','return_type':'bool'},'multi_query':{'signature':'string $query | bool','return_type':'bool'},'next_result':{'signature':'void | bool','return_type':'bool'},'options':{'signature':'int $option, mixed $value | bool','return_type':'bool'},'ping':{'signature':'void | bool','return_type':'bool'},'prepare':{'signature':'string $query | mysqli_stmt','return_type':'mysqli_stmt'},'query':{'signature':'string $query [, int $resultmode = MYSQLI_STORE_RESULT] | mixed','return_type':'mixed'},'real_connect':{'signature':'[ string $host [, string $username [, string $passwd [, string $dbname [, int $port [, string $socket [, int $flags]]]]]]] | bool','return_type':'bool'},'escape_string':{'signature':'string $escapestr | string','return_type':'string'},'real_query':{'signature':'string $query | bool','return_type':'bool'},'reap_async_query':{'signature':'void | mysqli_result','return_type':'mysqli_result'},'refresh':{'signature':'int $options | bool','return_type':'bool'},'rollback':{'signature':'[ int $flags [, string $name]] | bool','return_type':'bool'},'rpl_query_type':{'signature':'string $query | int','return_type':'int'},'select_db':{'signature':'string $dbname | bool','return_type':'bool'},'send_query':{'signature':'string $query | bool','return_type':'bool'},'set_charset':{'signature':'string $charset | bool','return_type':'bool'},'set_local_infile_handler':{'signature':'mysqli $link, callable $read_func | bool','return_type':'bool'},'ssl_set':{'signature':'string $key, string $cert, string $ca, string $capath, string $cipher | bool','return_type':'bool'},'stat':{'signature':'void | string','return_type':'string'},'stmt_init':{'signature':'void | mysqli_stmt','return_type':'mysqli_stmt'},'store_result':{'signature':'void | mysqli_result','return_type':'mysqli_result'},'use_result':{'signature':'void | mysqli_result','return_type':'mysqli_result'},},'static_methods':{'poll':{'signature':'array &$read, array &$error, array &$reject, int $sec [, int $usec] | int','return_type':'int'},},},} +let php_builtin['classes']['pdo']={'pdo':{'name':'PDO','constants':{'FETCH_ORI_ABS':'','ATTR_PERSISTENT':'','CLASS_CONSTANT':'','ATTR_DEFAULT_FETCH_MODE':'','FETCH_PROPS_LATE':'','FETCH_KEY_PAIR':'','FB_ATTR_DATE_FORMAT':'','FB_ATTR_TIME_FORMAT':'','FB_ATTR_TIMESTAMP_FORMAT':'','MYSQL_ATTR_READ_DEFAULT_FILE':'','MYSQL_ATTR_READ_DEFAULT_GROUP':'','ATTR_AUTOCOMMIT':'','FOURD_ATTR_CHARSET':'','FOURD_ATTR_PREFERRED_IMAGE_TYPES':'','PARAM_LOB':'','PARAM_BOOL':'','PARAM_NULL':'','PARAM_INT':'','PARAM_STR':'','PARAM_STMT':'','PARAM_INPUT_OUTPUT':'','FETCH_LAZY':'','FETCH_ASSOC':'','FETCH_NAMED':'','FETCH_NUM':'','FETCH_BOTH':'','FETCH_OBJ':'','FETCH_BOUND':'','FETCH_COLUMN':'','FETCH_CLASS':'','FETCH_INTO':'','FETCH_FUNC':'','FETCH_GROUP':'','FETCH_UNIQUE':'','FETCH_CLASSTYPE':'','FETCH_SERIALIZE':'','ATTR_PREFETCH':'','ATTR_TIMEOUT':'','ATTR_ERRMODE':'','ATTR_SERVER_VERSION':'','ATTR_CLIENT_VERSION':'','ATTR_SERVER_INFO':'','ATTR_CONNECTION_STATUS':'','ATTR_CASE':'','ATTR_CURSOR_NAME':'','ATTR_CURSOR':'','CURSOR_FWDONLY':'','CURSOR_SCROLL':'','ATTR_DRIVER_NAME':'','ATTR_ORACLE_NULLS':'','ATTR_STATEMENT_CLASS':'','ATTR_FETCH_CATALOG_NAMES':'','ATTR_FETCH_TABLE_NAMES':'','ATTR_STRINGIFY_FETCHES':'','ATTR_MAX_COLUMN_LEN':'','ATTR_EMULATE_PREPARES':'','ERRMODE_SILENT':'','ERRMODE_WARNING':'','ERRMODE_EXCEPTION':'','CASE_NATURAL':'','CASE_LOWER':'','CASE_UPPER':'','NULL_NATURAL':'','NULL_EMPTY_STRING':'','NULL_TO_STRING':'','FETCH_ORI_NEXT':'','FETCH_ORI_PRIOR':'','FETCH_ORI_FIRST':'','FETCH_ORI_LAST':'','FETCH_ORI_REL':'','ERR_NONE':'','PARAM_EVT_ALLOC':'','PARAM_EVT_FREE':'','PARAM_EVT_EXEC_PRE':'','PARAM_EVT_EXEC_POST':'','PARAM_EVT_FETCH_PRE':'','PARAM_EVT_FETCH_POST':'','PARAM_EVT_NORMALIZE':'','MYSQL_ATTR_INIT_COMMAND':'','MYSQL_ATTR_USE_BUFFERED_QUERY':'','MYSQL_ATTR_LOCAL_INFILE':'','MYSQL_ATTR_MAX_BUFFER_SIZE':'','MYSQL_ATTR_DIRECT_QUERY':'','MYSQL_ATTR_FOUND_ROWS':'','MYSQL_ATTR_IGNORE_SPACE':'','MYSQL_ATTR_COMPRESS':'','MYSQL_ATTR_SSL_CA':'','MYSQL_ATTR_SSL_CAPATH':'','MYSQL_ATTR_SSL_CERT':'','MYSQL_ATTR_SSL_CIPHER':'','MYSQL_ATTR_SSL_KEY':'','SQLSRV_TXN_READ_UNCOMMITTED':'','SQLSRV_TXN_READ_COMMITTED':'','SQLSRV_TXN_REPEATABLE_READ':'','SQLSRV_TXN_SNAPSHOT':'','SQLSRV_TXN_SERIALIZABLE':'','SQLSRV_ENCODING_BINARY':'','SQLSRV_ENCODING_SYSTEM':'','SQLSRV_ENCODING_UTF8':'','SQLSRV_ENCODING_DEFAULT':'','SQLSRV_ATTR_QUERY_TIMEOUT':'','SQLSRV_ATTR_DIRECT_QUERY':'',},'methods':{'__construct':{'signature':'string $dsn [, string $username [, string $password [, array $driver_options]]]','return_type':''},'beginTransaction':{'signature':'void | bool','return_type':'bool'},'commit':{'signature':'void | bool','return_type':'bool'},'errorCode':{'signature':'void | mixed','return_type':'mixed'},'errorInfo':{'signature':'void | array','return_type':'array'},'exec':{'signature':'string $statement | int','return_type':'int'},'getAttribute':{'signature':'int $attribute | mixed','return_type':'mixed'},'inTransaction':{'signature':'void | bool','return_type':'bool'},'lastInsertId':{'signature':'[ string $name = NULL] | string','return_type':'string'},'prepare':{'signature':'string $statement [, array $driver_options = array()] | PDOStatement','return_type':'PDOStatement'},'query':{'signature':'string $statement | PDOStatement','return_type':'PDOStatement'},'quote':{'signature':'string $string [, int $parameter_type = PDO::PARAM_STR] | string','return_type':'string'},'rollBack':{'signature':'void | bool','return_type':'bool'},'setAttribute':{'signature':'int $attribute, mixed $value | bool','return_type':'bool'},},'static_methods':{'getAvailableDrivers':{'signature':'void | array','return_type':'array'},},},'pdoexception':{'name':'PDOException','properties': {'errorInfo':{'initializer':'','type':'array'},'code':{'initializer':'','type':'int'},'message':{'initializer':'','type':'string'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'pdostatement':{'name':'PDOStatement','properties': {'queryString':{'initializer':'','type':'string'},},'methods':{'bindColumn':{'signature':'mixed $column, mixed &$param [, int $type [, int $maxlen [, mixed $driverdata]]] | bool','return_type':'bool'},'bindParam':{'signature':'mixed $parameter, mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options]]] | bool','return_type':'bool'},'bindValue':{'signature':'mixed $parameter, mixed $value [, int $data_type = PDO::PARAM_STR] | bool','return_type':'bool'},'closeCursor':{'signature':'void | bool','return_type':'bool'},'columnCount':{'signature':'void | int','return_type':'int'},'debugDumpParams':{'signature':'void | void','return_type':'void'},'errorCode':{'signature':'void | string','return_type':'string'},'errorInfo':{'signature':'void | array','return_type':'array'},'execute':{'signature':'[ array $input_parameters] | bool','return_type':'bool'},'fetch':{'signature':'[ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0]]] | mixed','return_type':'mixed'},'fetchAll':{'signature':'[ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array()]]] | array','return_type':'array'},'fetchColumn':{'signature':'[ int $column_number = 0] | string','return_type':'string'},'fetchObject':{'signature':'[ string $class_name = "stdClass" [, array $ctor_args]] | mixed','return_type':'mixed'},'getAttribute':{'signature':'int $attribute | mixed','return_type':'mixed'},'getColumnMeta':{'signature':'int $column | array','return_type':'array'},'nextRowset':{'signature':'void | bool','return_type':'bool'},'rowCount':{'signature':'void | int','return_type':'int'},'setAttribute':{'signature':'int $attribute, mixed $value | bool','return_type':'bool'},'setFetchMode':{'signature':'int $mode | bool','return_type':'bool'},},},} +let php_builtin['classes']['phar']={'phar':{'name':'Phar','methods':{'addEmptyDir':{'signature':'string $dirname | void','return_type':'void'},'addFile':{'signature':'string $file [, string $localname] | void','return_type':'void'},'addFromString':{'signature':'string $localname, string $contents | void','return_type':'void'},'buildFromDirectory':{'signature':'string $base_dir [, string $regex] | array','return_type':'array'},'buildFromIterator':{'signature':'Iterator $iter [, string $base_directory] | array','return_type':'array'},'compress':{'signature':'int $compression [, string $extension] | object','return_type':'object'},'compressAllFilesBZIP2':{'signature':'void | bool','return_type':'bool'},'compressAllFilesGZ':{'signature':'void | bool','return_type':'bool'},'compressFiles':{'signature':'int $compression | void','return_type':'void'},'__construct':{'signature':'string $fname [, int $flags [, string $alias]]','return_type':''},'convertToData':{'signature':'[ int $format = 9021976 [, int $compression = 9021976 [, string $extension]]] | PharData','return_type':'PharData'},'convertToExecutable':{'signature':'[ int $format = 9021976 [, int $compression = 9021976 [, string $extension]]] | Phar','return_type':'Phar'},'copy':{'signature':'string $oldfile, string $newfile | bool','return_type':'bool'},'count':{'signature':'void | int','return_type':'int'},'decompress':{'signature':'[ string $extension] | object','return_type':'object'},'decompressFiles':{'signature':'void | bool','return_type':'bool'},'delMetadata':{'signature':'void | bool','return_type':'bool'},'delete':{'signature':'string $entry | bool','return_type':'bool'},'extractTo':{'signature':'string $pathto [, string|array $files [, bool $overwrite = false]] | bool','return_type':'bool'},'getMetadata':{'signature':'void | mixed','return_type':'mixed'},'getModified':{'signature':'void | bool','return_type':'bool'},'getSignature':{'signature':'void | array','return_type':'array'},'getStub':{'signature':'void | string','return_type':'string'},'getVersion':{'signature':'void | string','return_type':'string'},'hasMetadata':{'signature':'void | bool','return_type':'bool'},'isBuffering':{'signature':'void | bool','return_type':'bool'},'isCompressed':{'signature':'void | mixed','return_type':'mixed'},'isFileFormat':{'signature':'int $format | bool','return_type':'bool'},'isWritable':{'signature':'void | bool','return_type':'bool'},'offsetExists':{'signature':'string $offset | bool','return_type':'bool'},'offsetGet':{'signature':'string $offset | int','return_type':'int'},'offsetSet':{'signature':'string $offset, string $value | void','return_type':'void'},'offsetUnset':{'signature':'string $offset | bool','return_type':'bool'},'setAlias':{'signature':'string $alias | bool','return_type':'bool'},'setDefaultStub':{'signature':'[ string $index [, string $webindex]] | bool','return_type':'bool'},'setMetadata':{'signature':'mixed $metadata | void','return_type':'void'},'setSignatureAlgorithm':{'signature':'int $sigtype [, string $privatekey] | void','return_type':'void'},'setStub':{'signature':'string $stub [, int $len = -1] | bool','return_type':'bool'},'startBuffering':{'signature':'void | void','return_type':'void'},'stopBuffering':{'signature':'void | void','return_type':'void'},'uncompressAllFiles':{'signature':'void | bool','return_type':'bool'},},'static_methods':{'apiVersion':{'signature':'void | string','return_type':'string'},'canCompress':{'signature':'[ int $type = 0] | bool','return_type':'bool'},'canWrite':{'signature':'void | bool','return_type':'bool'},'createDefaultStub':{'signature':'[ string $indexfile [, string $webindexfile]] | string','return_type':'string'},'getSupportedCompression':{'signature':'void | array','return_type':'array'},'getSupportedSignatures':{'signature':'void | array','return_type':'array'},'interceptFileFuncs':{'signature':'void | void','return_type':'void'},'isValidPharFilename':{'signature':'string $filename [, bool $executable = true] | bool','return_type':'bool'},'loadPhar':{'signature':'string $filename [, string $alias] | bool','return_type':'bool'},'mapPhar':{'signature':'[ string $alias [, int $dataoffset = 0]] | bool','return_type':'bool'},'mount':{'signature':'string $pharpath, string $externalpath | void','return_type':'void'},'mungServer':{'signature':'array $munglist | void','return_type':'void'},'running':{'signature':'[ bool $retphar = true] | string','return_type':'string'},'unlinkArchive':{'signature':'string $archive | bool','return_type':'bool'},'webPhar':{'signature':'[ string $alias [, string $index = "index.php" [, string $f404 [, array $mimetypes [, callable $rewrites]]]]] | void','return_type':'void'},},},'phardata':{'name':'PharData','methods':{'addEmptyDir':{'signature':'string $dirname | void','return_type':'void'},'addFile':{'signature':'string $file [, string $localname] | void','return_type':'void'},'addFromString':{'signature':'string $localname, string $contents | void','return_type':'void'},'buildFromDirectory':{'signature':'string $base_dir [, string $regex] | array','return_type':'array'},'buildFromIterator':{'signature':'Iterator $iter [, string $base_directory] | array','return_type':'array'},'compress':{'signature':'int $compression [, string $extension] | object','return_type':'object'},'compressFiles':{'signature':'int $compression | void','return_type':'void'},'__construct':{'signature':'string $fname [, int $flags [, string $alias]]','return_type':''},'convertToData':{'signature':'[ int $format = 9021976 [, int $compression = 9021976 [, string $extension]]] | PharData','return_type':'PharData'},'convertToExecutable':{'signature':'[ int $format = 9021976 [, int $compression = 9021976 [, string $extension]]] | Phar','return_type':'Phar'},'copy':{'signature':'string $oldfile, string $newfile | bool','return_type':'bool'},'decompress':{'signature':'[ string $extension] | object','return_type':'object'},'decompressFiles':{'signature':'void | bool','return_type':'bool'},'delMetadata':{'signature':'void | bool','return_type':'bool'},'delete':{'signature':'string $entry | bool','return_type':'bool'},'extractTo':{'signature':'string $pathto [, string|array $files [, bool $overwrite = false]] | bool','return_type':'bool'},'isWritable':{'signature':'void | bool','return_type':'bool'},'offsetSet':{'signature':'string $offset, string $value | void','return_type':'void'},'offsetUnset':{'signature':'string $offset | bool','return_type':'bool'},'setAlias':{'signature':'string $alias | bool','return_type':'bool'},'setDefaultStub':{'signature':'[ string $index [, string $webindex]] | bool','return_type':'bool'},'setMetadata':{'signature':'mixed $metadata | void','return_type':'void'},'setSignatureAlgorithm':{'signature':'int $sigtype [, string $privatekey] | void','return_type':'void'},'setStub':{'signature':'string $stub [, int $len = -1] | bool','return_type':'bool'},'compressAllFilesBZIP2':{'signature':'void | bool','return_type':'bool'},'compressAllFilesGZ':{'signature':'void | bool','return_type':'bool'},'count':{'signature':'void | int','return_type':'int'},'getMetadata':{'signature':'void | mixed','return_type':'mixed'},'getModified':{'signature':'void | bool','return_type':'bool'},'getSignature':{'signature':'void | array','return_type':'array'},'getStub':{'signature':'void | string','return_type':'string'},'getVersion':{'signature':'void | string','return_type':'string'},'hasMetadata':{'signature':'void | bool','return_type':'bool'},'isBuffering':{'signature':'void | bool','return_type':'bool'},'isCompressed':{'signature':'void | mixed','return_type':'mixed'},'isFileFormat':{'signature':'int $format | bool','return_type':'bool'},'offsetExists':{'signature':'string $offset | bool','return_type':'bool'},'offsetGet':{'signature':'string $offset | int','return_type':'int'},'startBuffering':{'signature':'void | void','return_type':'void'},'stopBuffering':{'signature':'void | void','return_type':'void'},'uncompressAllFiles':{'signature':'void | bool','return_type':'bool'},},'static_methods':{'apiVersion':{'signature':'void | string','return_type':'string'},'canCompress':{'signature':'[ int $type = 0] | bool','return_type':'bool'},'canWrite':{'signature':'void | bool','return_type':'bool'},'createDefaultStub':{'signature':'[ string $indexfile [, string $webindexfile]] | string','return_type':'string'},'getSupportedCompression':{'signature':'void | array','return_type':'array'},'getSupportedSignatures':{'signature':'void | array','return_type':'array'},'interceptFileFuncs':{'signature':'void | void','return_type':'void'},'isValidPharFilename':{'signature':'string $filename [, bool $executable = true] | bool','return_type':'bool'},'loadPhar':{'signature':'string $filename [, string $alias] | bool','return_type':'bool'},'mapPhar':{'signature':'[ string $alias [, int $dataoffset = 0]] | bool','return_type':'bool'},'mount':{'signature':'string $pharpath, string $externalpath | void','return_type':'void'},'mungServer':{'signature':'array $munglist | void','return_type':'void'},'running':{'signature':'[ bool $retphar = true] | string','return_type':'string'},'unlinkArchive':{'signature':'string $archive | bool','return_type':'bool'},'webPhar':{'signature':'[ string $alias [, string $index = "index.php" [, string $f404 [, array $mimetypes [, callable $rewrites]]]]] | void','return_type':'void'},},},'pharexception':{'name':'PharException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'pharfileinfo':{'name':'PharFileInfo','methods':{'chmod':{'signature':'int $permissions | void','return_type':'void'},'compress':{'signature':'int $compression | bool','return_type':'bool'},'__construct':{'signature':'string $entry','return_type':''},'decompress':{'signature':'void | bool','return_type':'bool'},'delMetadata':{'signature':'void | bool','return_type':'bool'},'getCRC32':{'signature':'void | int','return_type':'int'},'getCompressedSize':{'signature':'void | int','return_type':'int'},'getMetadata':{'signature':'void | mixed','return_type':'mixed'},'getPharFlags':{'signature':'void | int','return_type':'int'},'hasMetadata':{'signature':'void | bool','return_type':'bool'},'isCRCChecked':{'signature':'void | bool','return_type':'bool'},'isCompressed':{'signature':'[ int $compression_type = 9021976] | bool','return_type':'bool'},'isCompressedBZIP2':{'signature':'void | bool','return_type':'bool'},'isCompressedGZ':{'signature':'void | bool','return_type':'bool'},'setCompressedBZIP2':{'signature':'void | bool','return_type':'bool'},'setCompressedGZ':{'signature':'void | bool','return_type':'bool'},'setMetadata':{'signature':'mixed $metadata | void','return_type':'void'},'setUncompressed':{'signature':'void | bool','return_type':'bool'},},},} +let php_builtin['classes']['streams']={'php_user_filter':{'name':'php_user_filter','properties': {'filtername':{'initializer':'','type':''},'params':{'initializer':'','type':''},},'methods':{'filter':{'signature':'resource $in, resource $out, int &$consumed, bool $closing | int','return_type':'int'},'onClose':{'signature':'void | void','return_type':'void'},'onCreate':{'signature':'void | bool','return_type':'bool'},},},} +let php_builtin['classes']['sessions']={'sessionhandler':{'name':'SessionHandler','methods':{'close':{'signature':'void | bool','return_type':'bool'},'destroy':{'signature':'string $session_id | bool','return_type':'bool'},'gc':{'signature':'int $maxlifetime | bool','return_type':'bool'},'open':{'signature':'string $save_path, string $session_id | bool','return_type':'bool'},'read':{'signature':'string $session_id | string','return_type':'string'},'write':{'signature':'string $session_id, string $session_data | bool','return_type':'bool'},},},'sessionhandlerinterface':{'name':'SessionHandlerInterface','methods':{'close':{'signature':'void | bool','return_type':'bool'},'destroy':{'signature':'string $session_id | bool','return_type':'bool'},'gc':{'signature':'string $maxlifetime | bool','return_type':'bool'},'open':{'signature':'string $save_path, string $name | bool','return_type':'bool'},'read':{'signature':'string $session_id | string','return_type':'string'},'write':{'signature':'string $session_id, string $session_data | bool','return_type':'bool'},},},} +let php_builtin['classes']['simplexml']={'simplexmlelement':{'name':'SimpleXMLElement','methods':{'__construct':{'signature':'string $data [, int $options = 0 [, bool $data_is_url = false [, string $ns = "" [, bool $is_prefix = false]]]]','return_type':''},'addAttribute':{'signature':'string $name [, string $value [, string $namespace]] | void','return_type':'void'},'addChild':{'signature':'string $name [, string $value [, string $namespace]] | SimpleXMLElement','return_type':'SimpleXMLElement'},'asXML':{'signature':'[ string $filename] | mixed','return_type':'mixed'},'attributes':{'signature':'[ string $ns = NULL [, bool $is_prefix = false]] | SimpleXMLElement','return_type':'SimpleXMLElement'},'children':{'signature':'[ string $ns [, bool $is_prefix = false]] | SimpleXMLElement','return_type':'SimpleXMLElement'},'count':{'signature':'void | int','return_type':'int'},'getDocNamespaces':{'signature':'[ bool $recursive = false [, bool $from_root = true]] | array','return_type':'array'},'getName':{'signature':'void | string','return_type':'string'},'getNamespaces':{'signature':'[ bool $recursive = false] | array','return_type':'array'},'registerXPathNamespace':{'signature':'string $prefix, string $ns | bool','return_type':'bool'},'__toString':{'signature':'void | string','return_type':'string'},'xpath':{'signature':'string $path | array','return_type':'array'},},},'simplexmliterator':{'name':'SimpleXMLIterator','methods':{'current':{'signature':'void | mixed','return_type':'mixed'},'getChildren':{'signature':'void | SimpleXMLIterator','return_type':'SimpleXMLIterator'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},'__construct':{'signature':'string $data [, int $options = 0 [, bool $data_is_url = false [, string $ns = "" [, bool $is_prefix = false]]]]','return_type':''},'addAttribute':{'signature':'string $name [, string $value [, string $namespace]] | void','return_type':'void'},'addChild':{'signature':'string $name [, string $value [, string $namespace]] | SimpleXMLElement','return_type':'SimpleXMLElement'},'asXML':{'signature':'[ string $filename] | mixed','return_type':'mixed'},'attributes':{'signature':'[ string $ns = NULL [, bool $is_prefix = false]] | SimpleXMLElement','return_type':'SimpleXMLElement'},'children':{'signature':'[ string $ns [, bool $is_prefix = false]] | SimpleXMLElement','return_type':'SimpleXMLElement'},'count':{'signature':'void | int','return_type':'int'},'getDocNamespaces':{'signature':'[ bool $recursive = false [, bool $from_root = true]] | array','return_type':'array'},'getName':{'signature':'void | string','return_type':'string'},'getNamespaces':{'signature':'[ bool $recursive = false] | array','return_type':'array'},'registerXPathNamespace':{'signature':'string $prefix, string $ns | bool','return_type':'bool'},'__toString':{'signature':'void | string','return_type':'string'},'xpath':{'signature':'string $path | array','return_type':'array'},},},} +let php_builtin['classes']['spl_types']={'splbool':{'name':'SplBool','constants':{'__default':'false','false':'false','true':'true',},'methods':{'getConstList':{'signature':'[ bool $include_default = false] | array','return_type':'array'},},},'splenum':{'name':'SplEnum','constants':{'__default':'null',},'methods':{'getConstList':{'signature':'[ bool $include_default = false] | array','return_type':'array'},'__construct':{'signature':'[ mixed $initial_value [, bool $strict]]','return_type':''},},},'splfloat':{'name':'SplFloat','constants':{'__default':'0',},'methods':{'__construct':{'signature':'[ mixed $initial_value [, bool $strict]]','return_type':''},},},'splint':{'name':'SplInt','constants':{'__default':'0',},'methods':{'__construct':{'signature':'[ mixed $initial_value [, bool $strict]]','return_type':''},},},'splstring':{'name':'SplString','constants':{'__default':'0',},'methods':{'__construct':{'signature':'[ mixed $initial_value [, bool $strict]]','return_type':''},},},'spltype':{'name':'SplType','constants':{'__default':'null',},'methods':{'__construct':{'signature':'[ mixed $initial_value [, bool $strict]]','return_type':''},},},} +let php_builtin['classes']['xmlreader']={'xmlreader':{'name':'XMLReader','constants':{'NONE':'0','ELEMENT':'1','ATTRIBUTE':'2','TEXT':'3','CDATA':'4','ENTITY_REF':'5','ENTITY':'6','PI':'7','COMMENT':'8','DOC':'9','DOC_TYPE':'10','DOC_FRAGMENT':'11','NOTATION':'12','WHITESPACE':'13','SIGNIFICANT_WHITESPACE':'14','END_ELEMENT':'15','END_ENTITY':'16','XML_DECLARATION':'17','LOADDTD':'1','DEFAULTATTRS':'2','VALIDATE':'3','SUBST_ENTITIES':'4',},'properties': {'attributeCount':{'initializer':'','type':'int'},'baseURI':{'initializer':'','type':'string'},'depth':{'initializer':'','type':'int'},'hasAttributes':{'initializer':'','type':'bool'},'hasValue':{'initializer':'','type':'bool'},'isDefault':{'initializer':'','type':'bool'},'isEmptyElement':{'initializer':'','type':'bool'},'localName':{'initializer':'','type':'string'},'name':{'initializer':'','type':'string'},'namespaceURI':{'initializer':'','type':'string'},'nodeType':{'initializer':'','type':'int'},'prefix':{'initializer':'','type':'string'},'value':{'initializer':'','type':'string'},'xmlLang':{'initializer':'','type':'string'},},'methods':{'close':{'signature':'void | bool','return_type':'bool'},'expand':{'signature':'[ DOMNode $basenode] | DOMNode','return_type':'DOMNode'},'getAttribute':{'signature':'string $name | string','return_type':'string'},'getAttributeNo':{'signature':'int $index | string','return_type':'string'},'getAttributeNs':{'signature':'string $localName, string $namespaceURI | string','return_type':'string'},'getParserProperty':{'signature':'int $property | bool','return_type':'bool'},'isValid':{'signature':'void | bool','return_type':'bool'},'lookupNamespace':{'signature':'string $prefix | bool','return_type':'bool'},'moveToAttribute':{'signature':'string $name | bool','return_type':'bool'},'moveToAttributeNo':{'signature':'int $index | bool','return_type':'bool'},'moveToAttributeNs':{'signature':'string $localName, string $namespaceURI | bool','return_type':'bool'},'moveToElement':{'signature':'void | bool','return_type':'bool'},'moveToFirstAttribute':{'signature':'void | bool','return_type':'bool'},'moveToNextAttribute':{'signature':'void | bool','return_type':'bool'},'next':{'signature':'[ string $localname] | bool','return_type':'bool'},'open':{'signature':'string $URI [, string $encoding [, int $options = 0]] | bool','return_type':'bool'},'read':{'signature':'void | bool','return_type':'bool'},'readInnerXML':{'signature':'void | string','return_type':'string'},'readOuterXML':{'signature':'void | string','return_type':'string'},'readString':{'signature':'void | string','return_type':'string'},'setParserProperty':{'signature':'int $property, bool $value | bool','return_type':'bool'},'setRelaxNGSchema':{'signature':'string $filename | bool','return_type':'bool'},'setRelaxNGSchemaSource':{'signature':'string $source | bool','return_type':'bool'},'setSchema':{'signature':'string $filename | bool','return_type':'bool'},'xml':{'signature':'string $source [, string $encoding [, int $options = 0]] | bool','return_type':'bool'},},},} +let php_builtin['classes']['xmlwriter'] = {'xmlwriter':{'name':'XMLWriter','methods':{'endAttribute':{'signature':'void | bool','return_type':'bool'},'endCData':{'signature':'void | bool','return_type':'bool'},'endComment':{'signature':'void | bool','return_type':'bool'},'endDocument':{'signature':'void | bool','return_type':'bool'},'endDTDAttlist':{'signature':'void | bool','return_type':'bool'},'endDTDElement':{'signature':'void | bool','return_type':'bool'},'endDTDEntity':{'signature':'void | bool','return_type':'bool'},'endDTD':{'signature':'void | bool','return_type':'bool'},'endElement':{'signature':'void | bool','return_type':'bool'},'endPI':{'signature':'void | bool','return_type':'bool'},'flush':{'signature':'[bool $empty = true] | bool','return_type':'bool'},'fullEndElement':{'signature':'void | bool','return_type':'bool'},'openMemory':{'signature':'void | bool','return_type':'bool'},'openURI':{'signature':'string $uri | bool','return_type':'bool'},'outputMemory':{'signature':'[bool $flush = true] | bool','return_type':'bool'},'setIndentString':{'signature':'string $indentString | bool','return_type':'bool'},'setIndent':{'signature':'bool $indent | bool','return_type':'bool'},'startAttributeNS':{'signature':'string $prefix, string $name, string $uri | bool','return_type':'bool'},'startAttribute':{'signature':'string $name | bool','return_type':'bool'},'startCData':{'signature':'void | bool','return_type':'bool'},'startComment':{'signature':'void | bool','return_type':'bool'},'startDocument':{'signature':'[string $version = 1.0 [, string $encoding = NULL [, string $standalone ]]] | bool','return_type':'bool'},'startDTDAttlist':{'signature':'string $name | bool','return_type':'bool'},'startDTDElement':{'signature':'string $qualifiedName | bool','return_type':'bool'},'startDTDEntity':{'signature':'string $name, bool $isparam | bool','return_type':'bool'},'startDTD':{'signature':'string $qualifiedName [, string $publicId [, string $systemId ]] | bool','return_type':'bool'},'startElementNS':{'signature':'string $prefix, string $name, string $uri | bool','return_type':'bool'},'startElement':{'signature':'string $name | bool','return_type':'bool'},'startPI':{'signature':'string $target | bool','return_type':'bool'},'text':{'signature':'string $content | bool','return_type':'bool'},'writeAttributeNS':{'signature':'string $prefix, string $name, string $uri, string $content | bool','return_type':'bool'},'writeAttribute':{'signature':'string $name, string $value | bool','return_type':'bool'},'writeCData':{'signature':'string $content | bool','return_type':'bool'},'writeComment':{'signature':'string $content | bool','return_type':'bool'},'writeDTDAttlist':{'signature':'string $name, string $content | bool','return_type':'bool'},'writeDTDElement':{'signature':'string $name, string $content | bool','return_type':'bool'},'writeDTDEntity':{'signature':'string $name, string $content, bool $pe, string $pubid, string $sysid, string $ndataid | bool','return_type':'bool'},'writeDTD':{'signature':'string $name [, string $publicId [, string $systemId [, string $subset ]]] | bool','return_type':'bool'},'writeElementNS':{'signature':'string $prefix, string $name, string $uri [, string $content ] | bool','return_type':'bool'},'writeElement':{'signature':'string $name [, string $content ] | bool','return_type':'bool'},'writePI':{'signature':'string $target, string $content | bool','return_type':'bool'},'writeRaw':{'signature':'string $content | bool','return_type':'bool'},},},} +let php_builtin['classes']['zip']={'ziparchive':{'name':'ZipArchive','properties': {'status':{'initializer':'','type':'int'},'statusSys':{'initializer':'','type':'int'},'numFiles':{'initializer':'','type':'int'},'filename':{'initializer':'','type':'string'},'comment':{'initializer':'','type':'string'},},'methods':{'addEmptyDir':{'signature':'string $dirname | bool','return_type':'bool'},'addFile':{'signature':'string $filename [, string $localname = NULL [, int $start = 0 [, int $length = 0]]] | bool','return_type':'bool'},'addFromString':{'signature':'string $localname, string $contents | bool','return_type':'bool'},'addGlob':{'signature':'string $pattern [, int $flags = 0 [, array $options = array()]] | bool','return_type':'bool'},'addPattern':{'signature':'string $pattern [, string $path = ''.'' [, array $options = array()]] | bool','return_type':'bool'},'close':{'signature':'void | bool','return_type':'bool'},'deleteIndex':{'signature':'int $index | bool','return_type':'bool'},'deleteName':{'signature':'string $name | bool','return_type':'bool'},'extractTo':{'signature':'string $destination [, mixed $entries] | bool','return_type':'bool'},'getArchiveComment':{'signature':'[ int $flags] | string','return_type':'string'},'getCommentIndex':{'signature':'int $index [, int $flags] | string','return_type':'string'},'getCommentName':{'signature':'string $name [, int $flags] | string','return_type':'string'},'getFromIndex':{'signature':'int $index [, int $length = 0 [, int $flags]] | string','return_type':'string'},'getFromName':{'signature':'string $name [, int $length = 0 [, int $flags]] | string','return_type':'string'},'getNameIndex':{'signature':'int $index [, int $flags] | string','return_type':'string'},'getStatusString':{'signature':'void | string','return_type':'string'},'getStream':{'signature':'string $name | resource','return_type':'resource'},'locateName':{'signature':'string $name [, int $flags] | int','return_type':'int'},'open':{'signature':'string $filename [, int $flags] | mixed','return_type':'mixed'},'renameIndex':{'signature':'int $index, string $newname | bool','return_type':'bool'},'renameName':{'signature':'string $name, string $newname | bool','return_type':'bool'},'setArchiveComment':{'signature':'string $comment | bool','return_type':'bool'},'setCommentIndex':{'signature':'int $index, string $comment | bool','return_type':'bool'},'setCommentName':{'signature':'string $name, string $comment | bool','return_type':'bool'},'statIndex':{'signature':'int $index [, int $flags] | array','return_type':'array'},'statName':{'signature':'string $name [, int $flags] | array','return_type':'array'},'unchangeAll':{'signature':'void | bool','return_type':'bool'},'unchangeArchive':{'signature':'void | bool','return_type':'bool'},'unchangeIndex':{'signature':'int $index | bool','return_type':'bool'},'unchangeName':{'signature':'string $name | bool','return_type':'bool'},},},} +let php_builtin['interfaces']['predefined_interfaces_and_classes']={'arrayaccess':{'name':'ArrayAccess','methods':{'offsetExists':{'signature':'mixed $offset | boolean','return_type':'boolean'},'offsetGet':{'signature':'mixed $offset | mixed','return_type':'mixed'},'offsetSet':{'signature':'mixed $offset, mixed $value | void','return_type':'void'},'offsetUnset':{'signature':'mixed $offset | void','return_type':'void'},},},'iterator':{'name':'Iterator','methods':{'current':{'signature':'void | mixed','return_type':'mixed'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | boolean','return_type':'boolean'},},},'iteratoraggregate':{'name':'IteratorAggregate','methods':{'getIterator':{'signature':'void | Traversable','return_type':'Traversable'},},},'serializable':{'name':'Serializable','methods':{'serialize':{'signature':'void | string','return_type':'string'},'unserialize':{'signature':'string $serialized | void','return_type':'void'},},},'traversable':{'name':'Traversable',},} +let php_builtin['interfaces']['spl']={'countable':{'name':'Countable','methods':{'count':{'signature':'void | int','return_type':'int'},},},'outeriterator':{'name':'OuterIterator','methods':{'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'current':{'signature':'void | mixed','return_type':'mixed'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | boolean','return_type':'boolean'},},},'recursiveiterator':{'name':'RecursiveIterator','methods':{'getChildren':{'signature':'void | RecursiveIterator','return_type':'RecursiveIterator'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'current':{'signature':'void | mixed','return_type':'mixed'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | boolean','return_type':'boolean'},},},'seekableiterator':{'name':'SeekableIterator','methods':{'seek':{'signature':'int $position | void','return_type':'void'},'current':{'signature':'void | mixed','return_type':'mixed'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | boolean','return_type':'boolean'},},},'splobserver':{'name':'SplObserver','methods':{'update':{'signature':'SplSubject $subject | void','return_type':'void'},},},'splsubject':{'name':'SplSubject','methods':{'attach':{'signature':'SplObserver $observer | void','return_type':'void'},'detach':{'signature':'SplObserver $observer | void','return_type':'void'},'notify':{'signature':'void | void','return_type':'void'},},},} +let php_builtin['interfaces']['date_time']={'datetimeinterface':{'name':'DateTimeInterface','methods':{'diff':{'signature':'DateTimeInterface $datetime2 [, bool $absolute = false] | DateInterval','return_type':'DateInterval'},'format':{'signature':'string $format | string','return_type':'string'},'getOffset':{'signature':'void | int','return_type':'int'},'getTimestamp':{'signature':'void | int','return_type':'int'},'getTimezone':{'signature':'void | DateTimeZone','return_type':'DateTimeZone'},'__wakeup':{'signature':'void','return_type':''},},},} +let php_builtin['interfaces']['json']={'jsonserializable':{'name':'JsonSerializable','methods':{'jsonSerialize':{'signature':'void | mixed','return_type':'mixed'},},},} +let php_builtin['constants']['common']={'TRUE':'','FALSE':'','NULL':'','E_NOTICE':'','E_DEPRECATED':'','E_RECOVERABLE_ERROR':'','E_ALL':'','E_STRICT':'','E_WARNING':'','E_ERROR':'','E_PARSE':'','E_CORE_ERROR':'','E_CORE_WARNING':'','E_COMPILE_ERROR':'','E_COMPILE_WARNING':'','E_USER_ERROR':'','E_USER_WARNING':'','E_USER_NOTICE':'','E_USER_DEPRECATED':'','__COMPILER_HALT_OFFSET__':'','__FILE__':'','__LINE__':'','__DIR__':'','__FUNCTION__':'','__CLASS__':'','__TRAIT__':'','__METHOD__':'','__NAMESPACE__':'',} +let php_builtin['constants']['arrays']={'CASE_LOWER':'','CASE_UPPER':'','SORT_ASC':'','SORT_DESC':'','SORT_REGULAR':'','SORT_NUMERIC':'','SORT_STRING':'','SORT_LOCALE_STRING':'','SORT_NATURAL':'','SORT_FLAG_CASE':'','COUNT_NORMAL':'','COUNT_RECURSIVE':'','EXTR_OVERWRITE':'','EXTR_SKIP':'','EXTR_PREFIX_SAME':'','EXTR_PREFIX_ALL':'','EXTR_PREFIX_INVALID':'','EXTR_PREFIX_IF_EXISTS':'','EXTR_IF_EXISTS':'','EXTR_REFS':'',} +let php_builtin['constants']['calendar']={'CAL_GREGORIAN':'','CAL_JULIAN':'','CAL_JEWISH':'','CAL_FRENCH':'','CAL_NUM_CALS':'','CAL_DOW_DAYNO':'','CAL_DOW_SHORT':'','CAL_DOW_LONG':'','CAL_MONTH_GREGORIAN_SHORT':'','CAL_MONTH_GREGORIAN_LONG':'','CAL_MONTH_JULIAN_SHORT':'','CAL_MONTH_JULIAN_LONG':'','CAL_MONTH_JEWISH':'','CAL_MONTH_FRENCH':'','CAL_EASTER_DEFAULT':'','CAL_EASTER_ROMAN':'','CAL_EASTER_ALWAYS_GREGORIAN':'','CAL_EASTER_ALWAYS_JULIAN':'','CAL_JEWISH_ADD_ALAFIM_GERESH':'','CAL_JEWISH_ADD_ALAFIM':'','CAL_JEWISH_ADD_GERESHAYIM':'',} +let php_builtin['constants']['curl']={'CURLOPT_POSTFIELDS':'','CURLOPT_CAINFO':'','CURLOPT_AUTOREFERER':'','CURLOPT_COOKIESESSION':'','CURLOPT_DNS_USE_GLOBAL_CACHE':'','CURLOPT_DNS_CACHE_TIMEOUT':'','CURLOPT_FTP_SSL':'','CURLFTPSSL_TRY':'','CURLFTPSSL_ALL':'','CURLFTPSSL_CONTROL':'','CURLFTPSSL_NONE':'','CURLOPT_PRIVATE':'','CURLOPT_FTPSSLAUTH':'','CURLOPT_PORT':'','CURLOPT_FILE':'','CURLOPT_INFILE':'','CURLOPT_INFILESIZE':'','CURLOPT_URL':'','CURLOPT_PROXY':'','CURLOPT_VERBOSE':'','CURLOPT_HEADER':'','CURLOPT_HTTPHEADER':'','CURLOPT_NOPROGRESS':'','CURLOPT_NOBODY':'','CURLOPT_FAILONERROR':'','CURLOPT_UPLOAD':'','CURLOPT_POST':'','CURLOPT_FTPLISTONLY':'','CURLOPT_FTPAPPEND':'','CURLOPT_FTP_CREATE_MISSING_DIRS':'','CURLOPT_NETRC':'','CURLOPT_FOLLOWLOCATION':'','CURLOPT_FTPASCII':'','CURLOPT_PUT':'','CURLOPT_MUTE':'','CURLOPT_USERPWD':'','CURLOPT_PROXYUSERPWD':'','CURLOPT_RANGE':'','CURLOPT_TIMEOUT':'','CURLOPT_TIMEOUT_MS':'','CURLOPT_TCP_NODELAY':'','CURLOPT_PROGRESSFUNCTION':'','CURLOPT_REFERER':'','CURLOPT_USERAGENT':'','CURLOPT_FTPPORT':'','CURLOPT_FTP_USE_EPSV':'','CURLOPT_LOW_SPEED_LIMIT':'','CURLOPT_LOW_SPEED_TIME':'','CURLOPT_RESUME_FROM':'','CURLOPT_COOKIE':'','CURLOPT_SSLCERT':'','CURLOPT_SSLCERTPASSWD':'','CURLOPT_WRITEHEADER':'','CURLOPT_SSL_VERIFYHOST':'','CURLOPT_COOKIEFILE':'','CURLOPT_SSLVERSION':'','CURLOPT_TIMECONDITION':'','CURLOPT_TIMEVALUE':'','CURLOPT_CUSTOMREQUEST':'','CURLOPT_STDERR':'','CURLOPT_TRANSFERTEXT':'','CURLOPT_RETURNTRANSFER':'','CURLOPT_QUOTE':'','CURLOPT_POSTQUOTE':'','CURLOPT_INTERFACE':'','CURLOPT_KRB4LEVEL':'','CURLOPT_HTTPPROXYTUNNEL':'','CURLOPT_FILETIME':'','CURLOPT_WRITEFUNCTION':'','CURLOPT_READFUNCTION':'','CURLOPT_PASSWDFUNCTION':'','CURLOPT_HEADERFUNCTION':'','CURLOPT_MAXREDIRS':'','CURLOPT_MAXCONNECTS':'','CURLOPT_CLOSEPOLICY':'','CURLOPT_FRESH_CONNECT':'','CURLOPT_FORBID_REUSE':'','CURLOPT_RANDOM_FILE':'','CURLOPT_EGDSOCKET':'','CURLOPT_CONNECTTIMEOUT':'','CURLOPT_CONNECTTIMEOUT_MS':'','CURLOPT_SSL_VERIFYPEER':'','CURLOPT_CAPATH':'','CURLOPT_COOKIEJAR':'','CURLOPT_SSL_CIPHER_LIST':'','CURLOPT_BINARYTRANSFER':'','CURLOPT_NOSIGNAL':'','CURLOPT_PROXYTYPE':'','CURLOPT_BUFFERSIZE':'','CURLOPT_HTTPGET':'','CURLOPT_HTTP_VERSION':'','CURLOPT_SSLKEY':'','CURLOPT_SSLKEYTYPE':'','CURLOPT_SSLKEYPASSWD':'','CURLOPT_SSLENGINE':'','CURLOPT_SSLENGINE_DEFAULT':'','CURLOPT_SSLCERTTYPE':'','CURLOPT_CRLF':'','CURLOPT_ENCODING':'','CURLOPT_PROXYPORT':'','CURLOPT_UNRESTRICTED_AUTH':'','CURLOPT_FTP_USE_EPRT':'','CURLOPT_HTTP200ALIASES':'','CURLOPT_HTTPAUTH':'','CURLAUTH_BASIC':'','CURLAUTH_DIGEST':'','CURLAUTH_GSSNEGOTIATE':'','CURLAUTH_NTLM':'','CURLAUTH_ANY':'','CURLAUTH_ANYSAFE':'','CURLOPT_PROXYAUTH':'','CURLOPT_MAX_RECV_SPEED_LARGE':'','CURLOPT_MAX_SEND_SPEED_LARGE':'','CURLCLOSEPOLICY_LEAST_RECENTLY_USED':'','CURLCLOSEPOLICY_LEAST_TRAFFIC':'','CURLCLOSEPOLICY_SLOWEST':'','CURLCLOSEPOLICY_CALLBACK':'','CURLCLOSEPOLICY_OLDEST':'','CURLINFO_PRIVATE':'','CURLINFO_EFFECTIVE_URL':'','CURLINFO_HTTP_CODE':'','CURLINFO_HEADER_OUT':'','CURLINFO_HEADER_SIZE':'','CURLINFO_REQUEST_SIZE':'','CURLINFO_TOTAL_TIME':'','CURLINFO_NAMELOOKUP_TIME':'','CURLINFO_CONNECT_TIME':'','CURLINFO_PRETRANSFER_TIME':'','CURLINFO_SIZE_UPLOAD':'','CURLINFO_SIZE_DOWNLOAD':'','CURLINFO_SPEED_DOWNLOAD':'','CURLINFO_SPEED_UPLOAD':'','CURLINFO_FILETIME':'','CURLINFO_SSL_VERIFYRESULT':'','CURLINFO_CONTENT_LENGTH_DOWNLOAD':'','CURLINFO_CONTENT_LENGTH_UPLOAD':'','CURLINFO_STARTTRANSFER_TIME':'','CURLINFO_CONTENT_TYPE':'','CURLINFO_REDIRECT_TIME':'','CURLINFO_REDIRECT_COUNT':'','CURL_TIMECOND_IFMODSINCE':'','CURL_TIMECOND_IFUNMODSINCE':'','CURL_TIMECOND_LASTMOD':'','CURL_VERSION_IPV6':'','CURL_VERSION_KERBEROS4':'','CURL_VERSION_SSL':'','CURL_VERSION_LIBZ':'','CURLVERSION_NOW':'','CURLE_OK':'','CURLE_UNSUPPORTED_PROTOCOL':'','CURLE_FAILED_INIT':'','CURLE_URL_MALFORMAT':'','CURLE_URL_MALFORMAT_USER':'','CURLE_COULDNT_RESOLVE_PROXY':'','CURLE_COULDNT_RESOLVE_HOST':'','CURLE_COULDNT_CONNECT':'','CURLE_FTP_WEIRD_SERVER_REPLY':'','CURLE_FTP_ACCESS_DENIED':'','CURLE_FTP_USER_PASSWORD_INCORRECT':'','CURLE_FTP_WEIRD_PASS_REPLY':'','CURLE_FTP_WEIRD_USER_REPLY':'','CURLE_FTP_WEIRD_PASV_REPLY':'','CURLE_FTP_WEIRD_227_FORMAT':'','CURLE_FTP_CANT_GET_HOST':'','CURLE_FTP_CANT_RECONNECT':'','CURLE_FTP_COULDNT_SET_BINARY':'','CURLE_PARTIAL_FILE':'','CURLE_FTP_COULDNT_RETR_FILE':'','CURLE_FTP_WRITE_ERROR':'','CURLE_FTP_QUOTE_ERROR':'','CURLE_HTTP_NOT_FOUND':'','CURLE_WRITE_ERROR':'','CURLE_MALFORMAT_USER':'','CURLE_FTP_COULDNT_STOR_FILE':'','CURLE_READ_ERROR':'','CURLE_OUT_OF_MEMORY':'','CURLE_OPERATION_TIMEOUTED':'','CURLE_FTP_COULDNT_SET_ASCII':'','CURLE_FTP_PORT_FAILED':'','CURLE_FTP_COULDNT_USE_REST':'','CURLE_FTP_COULDNT_GET_SIZE':'','CURLE_HTTP_RANGE_ERROR':'','CURLE_HTTP_POST_ERROR':'','CURLE_SSL_CONNECT_ERROR':'','CURLE_FTP_BAD_DOWNLOAD_RESUME':'','CURLE_FILE_COULDNT_READ_FILE':'','CURLE_LDAP_CANNOT_BIND':'','CURLE_LDAP_SEARCH_FAILED':'','CURLE_LIBRARY_NOT_FOUND':'','CURLE_FUNCTION_NOT_FOUND':'','CURLE_ABORTED_BY_CALLBACK':'','CURLE_BAD_FUNCTION_ARGUMENT':'','CURLE_BAD_CALLING_ORDER':'','CURLE_HTTP_PORT_FAILED':'','CURLE_BAD_PASSWORD_ENTERED':'','CURLE_TOO_MANY_REDIRECTS':'','CURLE_UNKNOWN_TELNET_OPTION':'','CURLE_TELNET_OPTION_SYNTAX':'','CURLE_OBSOLETE':'','CURLE_SSL_PEER_CERTIFICATE':'','CURLE_GOT_NOTHING':'','CURLE_SSL_ENGINE_NOTFOUND':'','CURLE_SSL_ENGINE_SETFAILED':'','CURLE_SEND_ERROR':'','CURLE_RECV_ERROR':'','CURLE_SHARE_IN_USE':'','CURLE_SSL_CERTPROBLEM':'','CURLE_SSL_CIPHER':'','CURLE_SSL_CACERT':'','CURLE_BAD_CONTENT_ENCODING':'','CURLE_LDAP_INVALID_URL':'','CURLE_FILESIZE_EXCEEDED':'','CURLE_FTP_SSL_FAILED':'','CURLFTPAUTH_DEFAULT':'','CURLFTPAUTH_SSL':'','CURLFTPAUTH_TLS':'','CURLPROXY_HTTP':'','CURLPROXY_SOCKS5':'','CURL_NETRC_OPTIONAL':'','CURL_NETRC_IGNORED':'','CURL_NETRC_REQUIRED':'','CURL_HTTP_VERSION_NONE':'','CURL_HTTP_VERSION_1_0':'','CURL_HTTP_VERSION_1_1':'','CURLM_CALL_MULTI_PERFORM':'','CURLM_OK':'','CURLM_BAD_HANDLE':'','CURLM_BAD_EASY_HANDLE':'','CURLM_OUT_OF_MEMORY':'','CURLM_INTERNAL_ERROR':'','CURLMSG_DONE':'','CURLOPT_KEYPASSWD':'','CURLOPT_SSH_AUTH_TYPES':'','CURLOPT_SSH_HOST_PUBLIC_KEY_MD5':'','CURLOPT_SSH_PRIVATE_KEYFILE':'','CURLOPT_SSH_PUBLIC_KEYFILE':'','CURLMOPT_PIPELINING':'','CURLMOPT_MAXCONNECTS':'','CURLSSH_AUTH_ANY':'','CURLSSH_AUTH_DEFAULT':'','CURLSSH_AUTH_HOST':'','CURLSSH_AUTH_KEYBOARD':'','CURLSSH_AUTH_NONE':'','CURLSSH_AUTH_PASSWORD':'','CURLSSH_AUTH_PUBLICKEY':'','CURL_WRAPPERS_ENABLED':'','CURLPAUSE_ALL':'','CURLPAUSE_CONT':'','CURLPAUSE_RECV':'','CURLPAUSE_RECV_CONT':'','CURLPAUSE_SEND':'','CURLPAUSE_SEND_CONT':'','CURLM_XXX':'','CURLOPT_CERTINFO':'','CURLOPT_CONNECT_ONLY':'','CURLINFO_':'','CURLOPT_PROTOCOLS':'','CURLOPT_REDIR_PROTOCOLS':'','CURLOPT_IPRESOLVE':'','CURL_IPRESOLVE_WHATEVER':'','CURL_IPRESOLVE_V4':'','CURL_IPRESOLVE_V6':'','CURLOPT_SHARE':'','CURLSHOPT_SHARE':'','CURLSHOPT_UNSHARE':'','CURL_LOCK_DATA_COOKIE':'','CURL_LOCK_DATA_DNS':'','CURL_LOCK_DATA_SSL_SESSION':'',} +let php_builtin['constants']['date_time']={'DATE_ATOM':'','DATE_COOKIE':'','DATE_ISO8601':'','DATE_RFC822':'','DATE_RFC850':'','DATE_RFC1036':'','DATE_RFC1123':'','DATE_RFC2822':'','DATE_RFC3339':'','DATE_RSS':'','DATE_W3C':'','SUNFUNCS_RET_TIMESTAMP':'','SUNFUNCS_RET_STRING':'','SUNFUNCS_RET_DOUBLE':'','LC_TIME':'',} +let php_builtin['constants']['libxml']={'LIBXML_ERR_WARNING':'','LIBXML_ERR_ERROR':'','LIBXML_ERR_FATAL':'','LIBXML_NONET':'','LIBXML_COMPACT':'','LIBXML_DTDATTR':'','LIBXML_DTDLOAD':'','LIBXML_DTDVALID':'','LIBXML_HTML_NOIMPLIED':'','LIBXML_HTML_NODEFDTD':'','LIBXML_NOBLANKS':'','LIBXML_NOCDATA':'','LIBXML_NOEMPTYTAG':'','LIBXML_NOENT':'','LIBXML_NOERROR':'','LIBXML_NOWARNING':'','LIBXML_NOXMLDECL':'','LIBXML_NSCLEAN':'','LIBXML_PARSEHUGE':'','LIBXML_PEDANTIC':'','LIBXML_XINCLUDE':'','LIBXML_ERR_NONE':'','LIBXML_VERSION':'','LIBXML_DOTTED_VERSION':'','LIBXML_SCHEMA_CREATE':'',} +let php_builtin['constants']['mysqli']={'MYSQLI_REPORT_OFF':'','MYSQLI_REPORT_ALL':'','MYSQLI_REPORT_STRICT':'','MYSQLI_REPORT_ERROR':'','MYSQLI_REPORT_INDEX':'','MYSQLI_ASSOC':'','MYSQLI_NUM':'','MYSQLI_BOTH':'','PHP_INT_MAX':'','MYSQLI_READ_DEFAULT_GROUP':'','MYSQLI_READ_DEFAULT_FILE':'','MYSQLI_OPT_CONNECT_TIMEOUT':'','MYSQLI_OPT_LOCAL_INFILE':'','MYSQLI_INIT_COMMAND':'','MYSQLI_CLIENT_SSL':'','MYSQLI_CLIENT_COMPRESS':'','MYSQLI_CLIENT_INTERACTIVE':'','MYSQLI_CLIENT_IGNORE_SPACE':'','MYSQLI_CLIENT_NO_SCHEMA':'','MYSQLI_CLIENT_MULTI_QUERIES':'','MYSQLI_STORE_RESULT':'','MYSQLI_USE_RESULT':'','MYSQLI_NOT_NULL_FLAG':'','MYSQLI_PRI_KEY_FLAG':'','MYSQLI_UNIQUE_KEY_FLAG':'','MYSQLI_MULTIPLE_KEY_FLAG':'','MYSQLI_BLOB_FLAG':'','MYSQLI_UNSIGNED_FLAG':'','MYSQLI_ZEROFILL_FLAG':'','MYSQLI_AUTO_INCREMENT_FLAG':'','MYSQLI_TIMESTAMP_FLAG':'','MYSQLI_SET_FLAG':'','MYSQLI_NUM_FLAG':'','MYSQLI_PART_KEY_FLAG':'','MYSQLI_GROUP_FLAG':'','MYSQLI_TYPE_DECIMAL':'','MYSQLI_TYPE_NEWDECIMAL':'','MYSQLI_TYPE_BIT':'','MYSQLI_TYPE_TINY':'','MYSQLI_TYPE_SHORT':'','MYSQLI_TYPE_LONG':'','MYSQLI_TYPE_FLOAT':'','MYSQLI_TYPE_DOUBLE':'','MYSQLI_TYPE_NULL':'','MYSQLI_TYPE_TIMESTAMP':'','MYSQLI_TYPE_LONGLONG':'','MYSQLI_TYPE_INT24':'','MYSQLI_TYPE_DATE':'','MYSQLI_TYPE_TIME':'','MYSQLI_TYPE_DATETIME':'','MYSQLI_TYPE_YEAR':'','MYSQLI_TYPE_NEWDATE':'','MYSQLI_TYPE_INTERVAL':'','MYSQLI_TYPE_ENUM':'','MYSQLI_TYPE_SET':'','MYSQLI_TYPE_TINY_BLOB':'','MYSQLI_TYPE_MEDIUM_BLOB':'','MYSQLI_TYPE_LONG_BLOB':'','MYSQLI_TYPE_BLOB':'','MYSQLI_TYPE_VAR_STRING':'','MYSQLI_TYPE_STRING':'','MYSQLI_TYPE_CHAR':'','MYSQLI_TYPE_GEOMETRY':'','MYSQLI_NEED_DATA':'','MYSQLI_NO_DATA':'','MYSQLI_DATA_TRUNCATED':'','MYSQLI_ENUM_FLAG':'','MYSQLI_BINARY_FLAG':'','MYSQLI_CURSOR_TYPE_FOR_UPDATE':'','MYSQLI_CURSOR_TYPE_NO_CURSOR':'','MYSQLI_CURSOR_TYPE_READ_ONLY':'','MYSQLI_CURSOR_TYPE_SCROLLABLE':'','MYSQLI_STMT_ATTR_CURSOR_TYPE':'','MYSQLI_STMT_ATTR_PREFETCH_ROWS':'','MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH':'','MYSQLI_SET_CHARSET_NAME':'','MYSQLI_DEBUG_TRACE_ENABLED':'','MYSQLI_SERVER_QUERY_NO_GOOD_INDEX_USED':'','MYSQLI_SERVER_QUERY_NO_INDEX_USED':'','MYSQLI_REFRESH_GRANT':'','MYSQLI_REFRESH_LOG':'','MYSQLI_REFRESH_TABLES':'','MYSQLI_REFRESH_HOSTS':'','MYSQLI_REFRESH_STATUS':'','MYSQLI_REFRESH_THREADS':'','MYSQLI_REFRESH_SLAVE':'','MYSQLI_REFRESH_MASTER':'','MYSQLI_TRANS_COR_AND_CHAIN':'','MYSQLI_TRANS_COR_AND_NO_CHAIN':'','MYSQLI_TRANS_COR_RELEASE':'','MYSQLI_TRANS_COR_NO_RELEASE':'','MYSQL_READ_DEFAULT_FILE':'','MYSQLI_SERVER_PUBLIC_KEY':'','MYSQLI_NO_CHANGE_USER_ON_PCONNECT':'','MYSQLI_ASYNC':'','MYSQLI_OPT_INT_AND_FLOAT_NATIVE':'','MYSQLI_CLIENT_FOUND_ROWS':'','MULTI_STATEMENT':'','MYSQLI_RPL_MASTER':'','MYSQLI_RPL_SLAVE':'','MYSQLI_RPL_ADMIN':'',} +let php_builtin['constants']['spl']={'READ_AHEAD':'','MIT_NEED_ALL':'','MIT_KEYS_ASSOC':'','CALL_TOSTRING':'','CATCH_GET_CHILD':'','RIT_LEAVES_ONLY':'','LOCK_SH':'','LOCK_EX':'','LOCK_UN':'','LOCK_NB':'','SEEK_SET':'','SEEK_CUR':'','SEEK_END':'','PHP_INT_MAX':'',} +let php_builtin['constants']['unknow']={'PHP_INI_ALL':'','PHP_INI_PERDIR':'','PHP_INI_SYSTEM':'','PHP_INI_USER':'','COUNTER_FLAG_PERSIST':'','COUNTER_FLAG_SAVE':'','COUNTER_FLAG_NO_OVERWRITE':'','COUNTER_META_NAME':'','COUNTER_META_IS_PERISTENT':'','COUNTER_RESET_NEVER':'','COUNTER_RESET_PER_LOAD':'','COUNTER_RESET_PER_REQUEST':'','PDO_PLACEHOLDER_NAMED':'','PDO_PLACEHOLDER_POSITIONAL':'','PDO_PLACEHOLDER_NONE':'','PDO_CASE_NATURAL':'','PDO_CASE_UPPER':'','PDO_CASE_LOWER':'','PDO_ATTR_CASE':'','PHP_COUNTER_API':'','PHPAPI':'','COMPILE_DL_COUNTER':'','ZEND_GET_MODULE':'','HAVE_COUNTER':'','COUNTER_G':'','TSRMLS_DC':'','TSRMLS_FETCH':'','STANDARD_MODULE_HEADER':'','STANDARD_MODULE_HEADER_EX':'','STANDARD_MODULE_PROPERTIES':'','STANDARD_MODULE_PROPERTIES_EX':'','ZEND_MODULE_API_NO':'','ZEND_DEBUG':'','USING_ZTS':'','NO_VERSION_YET':'','NO_MODULE_GLOBALS':'','PHP_MODULE_GLOBALS':'','IGNORE_PATH':'','USE_PATH':'','IGNORE_URL':'','IGNORE_URL_WIN':'','ENFORCE_SAFE_MODE':'','REPORT_ERRORS':'','STREAM_MUST_SEEK':'','STREAM_WILL_CAST':'',} +let php_builtin['constants']['directories']={'DIRECTORY_SEPARATOR':'','PATH_SEPARATOR':'','SCANDIR_SORT_ASCENDING':'','SCANDIR_SORT_DESCENDING':'','SCANDIR_SORT_NONE':'',} +let php_builtin['constants']['dom']={'XML_ELEMENT_NODE':'','XML_ATTRIBUTE_NODE':'','XML_TEXT_NODE':'','XML_CDATA_SECTION_NODE':'','XML_ENTITY_REF_NODE':'','XML_ENTITY_NODE':'','XML_PI_NODE':'','XML_COMMENT_NODE':'','XML_DOCUMENT_NODE':'','XML_DOCUMENT_TYPE_NODE':'','XML_DOCUMENT_FRAG_NODE':'','XML_NOTATION_NODE':'','XML_HTML_DOCUMENT_NODE':'','XML_DTD_NODE':'','XML_ELEMENT_DECL_NODE':'','XML_ATTRIBUTE_DECL_NODE':'','XML_ENTITY_DECL_NODE':'','XML_NAMESPACE_DECL_NODE':'','XML_ATTRIBUTE_CDATA':'','XML_ATTRIBUTE_ID':'','XML_ATTRIBUTE_IDREF':'','XML_ATTRIBUTE_IDREFS':'','XML_ATTRIBUTE_ENTITY':'','XML_ATTRIBUTE_NMTOKEN':'','XML_ATTRIBUTE_NMTOKENS':'','XML_ATTRIBUTE_ENUMERATION':'','XML_ATTRIBUTE_NOTATION':'','DOM_PHP_ERR':'','DOM_INDEX_SIZE_ERR':'','DOMSTRING_SIZE_ERR':'','DOM_HIERARCHY_REQUEST_ERR':'','DOM_WRONG_DOCUMENT_ERR':'','DOM_INVALID_CHARACTER_ERR':'','DOM_NO_DATA_ALLOWED_ERR':'','DOM_NO_MODIFICATION_ALLOWED_ERR':'','DOM_NOT_FOUND_ERR':'','DOM_NOT_SUPPORTED_ERR':'','DOM_INUSE_ATTRIBUTE_ERR':'','DOM_INVALID_STATE_ERR':'','DOM_SYNTAX_ERR':'','DOM_INVALID_MODIFICATION_ERR':'','DOM_NAMESPACE_ERR':'','DOM_INVALID_ACCESS_ERR':'','DOM_VALIDATION_ERR':'','DOM_NOT_FOUND_ERROR':'','DOM_NOT_FOUND':'',} +let php_builtin['constants']['command_line_usage']={'PHP_SAPI':'','STDIN':'','STDOUT':'','STDERR':'',} +let php_builtin['constants']['handling_file_uploads']={'UPLOAD_ERR_OK':'','UPLOAD_ERR_INI_SIZE':'','UPLOAD_ERR_FORM_SIZE':'','UPLOAD_ERR_PARTIAL':'','UPLOAD_ERR_NO_FILE':'','UPLOAD_ERR_NO_TMP_DIR':'','UPLOAD_ERR_CANT_WRITE':'','UPLOAD_ERR_EXTENSION':'',} +let php_builtin['constants']['fileinfo']={'FILEINFO_NONE':'','FILEINFO_SYMLINK':'','FILEINFO_MIME_TYPE':'','FILEINFO_MIME_ENCODING':'','FILEINFO_MIME':'','FILEINFO_COMPRESS':'','FILEINFO_DEVICES':'','FILEINFO_CONTINUE':'','FILEINFO_PRESERVE_ATIME':'','FILEINFO_RAW':'',} +let php_builtin['constants']['filesystem']={'SEEK_SET':'','SEEK_CUR':'','SEEK_END':'','LOCK_SH':'','LOCK_EX':'','LOCK_UN':'','LOCK_NB':'','GLOB_BRACE':'','GLOB_ONLYDIR':'','GLOB_MARK':'','GLOB_NOSORT':'','GLOB_NOCHECK':'','GLOB_NOESCAPE':'','GLOB_AVAILABLE_FLAGS':'','PATHINFO_DIRNAME':'','PATHINFO_BASENAME':'','PATHINFO_EXTENSION':'','PATHINFO_FILENAME':'','FILE_USE_INCLUDE_PATH':'','FILE_NO_DEFAULT_CONTEXT':'','FILE_APPEND':'','FILE_IGNORE_NEW_LINES':'','FILE_SKIP_EMPTY_LINES':'','FILE_BINARY':'','FILE_TEXT':'','INI_SCANNER_NORMAL':'','INI_SCANNER_RAW':'','FNM_NOESCAPE':'','FNM_PATHNAME':'','FNM_PERIOD':'','FNM_CASEFOLD':'','GLOB_ERR':'',} +let php_builtin['constants']['filter']={'FILTER_FLAG_NO_ENCODE_QUOTES':'','INPUT_POST':'','INPUT_GET':'','INPUT_COOKIE':'','INPUT_ENV':'','INPUT_SERVER':'','INPUT_SESSION':'','INPUT_REQUEST':'','FILTER_FLAG_NONE':'','FILTER_REQUIRE_SCALAR':'','FILTER_REQUIRE_ARRAY':'','FILTER_FORCE_ARRAY':'','FILTER_NULL_ON_FAILURE':'','FILTER_VALIDATE_INT':'','FILTER_VALIDATE_BOOLEAN':'','FILTER_VALIDATE_FLOAT':'','FILTER_VALIDATE_REGEXP':'','FILTER_VALIDATE_URL':'','FILTER_VALIDATE_EMAIL':'','FILTER_VALIDATE_IP':'','FILTER_DEFAULT':'','FILTER_UNSAFE_RAW':'','FILTER_SANITIZE_STRING':'','FILTER_SANITIZE_STRIPPED':'','FILTER_SANITIZE_ENCODED':'','FILTER_SANITIZE_SPECIAL_CHARS':'','FILTER_SANITIZE_EMAIL':'','FILTER_SANITIZE_URL':'','FILTER_SANITIZE_NUMBER_INT':'','FILTER_SANITIZE_NUMBER_FLOAT':'','FILTER_SANITIZE_MAGIC_QUOTES':'','FILTER_CALLBACK':'','FILTER_FLAG_ALLOW_OCTAL':'','FILTER_FLAG_ALLOW_HEX':'','FILTER_FLAG_STRIP_LOW':'','FILTER_FLAG_STRIP_HIGH':'','FILTER_FLAG_ENCODE_LOW':'','FILTER_FLAG_ENCODE_HIGH':'','FILTER_FLAG_ENCODE_AMP':'','FILTER_FLAG_EMPTY_STRING_NULL':'','FILTER_FLAG_ALLOW_FRACTION':'','FILTER_FLAG_ALLOW_THOUSAND':'','FILTER_FLAG_ALLOW_SCIENTIFIC':'','FILTER_FLAG_PATH_REQUIRED':'','FILTER_FLAG_QUERY_REQUIRED':'','FILTER_FLAG_IPV4':'','FILTER_FLAG_IPV6':'','FILTER_FLAG_NO_RES_RANGE':'','FILTER_FLAG_NO_PRIV_RANGE':'','FILTER_SANITIZE_RAW':'','FILTER_SANITIZE_FULL_SPECIAL_CHARS':'','ENT_QUOTES':'',} +let php_builtin['constants']['php_options_info']={'ASSERT_CALLBACK':'','RUSAGE_CHILDREN':'','PHP_SAPI':'','PHP_OS':'','CREDITS_DOCS':'','CREDITS_GENERAL':'','CREDITS_GROUP':'','CREDITS_MODULES':'','CREDITS_FULLPAGE':'','PHP_VERSION_ID':'','PHP_VERSION':'','PATH_SEPARATOR':'','CREDITS_SAPI':'','CREDITS_QA':'','CREDITS_ALL':'','INFO_GENERAL':'','INFO_CREDITS':'','INFO_CONFIGURATION':'','INFO_MODULES':'','INFO_ENVIRONMENT':'','INFO_VARIABLES':'','INFO_LICENSE':'','INFO_ALL':'','ASSERT_ACTIVE':'','ASSERT_BAIL':'','ASSERT_WARNING':'','ASSERT_QUIET_EVAL':'','PHP_WINDOWS_VERSION_MAJOR':'','PHP_WINDOWS_VERSION_MINOR':'','PHP_WINDOWS_VERSION_BUILD':'','PHP_WINDOWS_VERSION_PLATFORM':'','PHP_WINDOWS_VERSION_SP_MAJOR':'','PHP_WINDOWS_VERSION_SP_MINOR':'','PHP_WINDOWS_VERSION_SUITEMASK':'','PHP_WINDOWS_VERSION_PRODUCTTYPE':'','PHP_WINDOWS_NT_DOMAIN_CONTROLLER':'','PHP_WINDOWS_NT_SERVER':'','PHP_WINDOWS_NT_WORKSTATION':'',} +let php_builtin['constants']['strings']={'CRYPT_SALT_LENGTH':'','CRYPT_STD_DES':'','CRYPT_EXT_DES':'','CRYPT_MD5':'','CRYPT_BLOWFISH':'','CRYPT_SHA256':'','CRYPT_SHA512':'','HTML_ENTITIES':'','HTML_SPECIALCHARS':'','ENT_COMPAT':'','ENT_QUOTES':'','ENT_NOQUOTES':'','ENT_HTML401':'','ENT_XML1':'','ENT_XHTML':'','ENT_HTML5':'','ENT_IGNORE':'','ENT_SUBSTITUTE':'','ENT_DISALLOWED':'','CHAR_MAX':'','LC_MONETARY':'','AM_STR':'','PM_STR':'','D_T_FMT':'','D_FMT':'','T_FMT':'','T_FMT_AMPM':'','ERA':'','ERA_YEAR':'','ERA_D_T_FMT':'','ERA_D_FMT':'','ERA_T_FMT':'','INT_CURR_SYMBOL':'','CURRENCY_SYMBOL':'','CRNCYSTR':'','MON_DECIMAL_POINT':'','MON_THOUSANDS_SEP':'','MON_GROUPING':'','POSITIVE_SIGN':'','NEGATIVE_SIGN':'','INT_FRAC_DIGITS':'','FRAC_DIGITS':'','P_CS_PRECEDES':'','P_SEP_BY_SPACE':'','N_CS_PRECEDES':'','N_SEP_BY_SPACE':'','P_SIGN_POSN':'','N_SIGN_POSN':'','DECIMAL_POINT':'','RADIXCHAR':'','THOUSANDS_SEP':'','THOUSEP':'','GROUPING':'','YESEXPR':'','NOEXPR':'','YESSTR':'','NOSTR':'','CODESET':'','LC_ALL':'','LC_COLLATE':'','LC_CTYPE':'','LC_NUMERIC':'','LC_TIME':'','LC_MESSAGES':'','PHP_INT_MAX':'','STR_PAD_RIGHT':'','STR_PAD_LEFT':'','STR_PAD_BOTH':'',} +let php_builtin['constants']['error_handling']={'DEBUG_BACKTRACE_PROVIDE_OBJECT':'','DEBUG_BACKTRACE_IGNORE_ARGS':'',} +let php_builtin['constants']['math']={'PHP_INT_MAX':'','M_PI':'','PHP_ROUND_HALF_UP':'','PHP_ROUND_HALF_DOWN':'','PHP_ROUND_HALF_EVEN':'','PHP_ROUND_HALF_ODD':'','M_E':'','M_LOG2E':'','M_LOG10E':'','M_LN2':'','M_LN10':'','M_PI_2':'','M_PI_4':'','M_1_PI':'','M_2_PI':'','M_SQRTPI':'','M_2_SQRTPI':'','M_SQRT2':'','M_SQRT3':'','M_SQRT1_2':'','M_LNPI':'','M_EULER':'','NAN':'','INF':'',} +let php_builtin['constants']['network']={'LOG_EMERG':'','LOG_ALERT':'','LOG_CRIT':'','LOG_ERR':'','LOG_WARNING':'','LOG_NOTICE':'','LOG_INFO':'','LOG_DEBUG':'','LOG_KERN':'','LOG_USER':'','LOG_MAIL':'','LOG_DAEMON':'','LOG_AUTH':'','LOG_SYSLOG':'','LOG_LPR':'','LOG_NEWS':'','LOG_CRON':'','LOG_AUTHPRIV':'','LOG_LOCAL0':'','LOG_LOCAL1':'','LOG_LOCAL2':'','LOG_LOCAL3':'','LOG_LOCAL4':'','LOG_LOCAL5':'','LOG_LOCAL6':'','LOG_LOCAL7':'','LOG_PID':'','LOG_CONS':'','LOG_ODELAY':'','LOG_NDELAY':'','LOG_NOWAIT':'','LOG_PERROR':'','DNS_A':'','DNS_CNAME':'','DNS_HINFO':'','DNS_MX':'','DNS_NS':'','DNS_PTR':'','DNS_SOA':'','DNS_TXT':'','DNS_AAAA':'','DNS_SRV':'','DNS_NAPTR':'','DNS_A6':'','DNS_ALL':'','DNS_ANY':'','SID':'','LOG_UUCP':'',} +let php_builtin['constants']['urls']={'PHP_QUERY_RFC1738':'','PHP_QUERY_RFC3986':'','PHP_URL_SCHEME':'','PHP_URL_HOST':'','PHP_URL_PORT':'','PHP_URL_USER':'','PHP_URL_PASS':'','PHP_URL_PATH':'','PHP_URL_QUERY':'','PHP_URL_FRAGMENT':'',} +let php_builtin['constants']['gd']={'IMAGETYPE_GIF':'','IMAGETYPE_JPEG':'','IMAGETYPE_PNG':'','IMAGETYPE_SWF':'','IMAGETYPE_PSD':'','IMAGETYPE_BMP':'','IMAGETYPE_TIFF_II':'','IMAGETYPE_TIFF_MM':'','IMAGETYPE_JPC':'','IMAGETYPE_JP2':'','IMAGETYPE_JPX':'','IMAGETYPE_JB2':'','IMAGETYPE_SWC':'','IMAGETYPE_IFF':'','IMAGETYPE_WBMP':'','IMAGETYPE_XBM':'','IMAGETYPE_ICO':'','IMG_CROP_THRESHOLD':'','IMG_ARC_PIE':'','IMG_ARC_CHORD':'','IMG_ARC_NOFILL':'','IMG_ARC_EDGED':'','IMG_FILTER_NEGATE':'','IMG_FILTER_GRAYSCALE':'','IMG_FILTER_BRIGHTNESS':'','IMG_FILTER_CONTRAST':'','IMG_FILTER_COLORIZE':'','IMG_FILTER_EDGEDETECT':'','IMG_FILTER_EMBOSS':'','IMG_FILTER_GAUSSIAN_BLUR':'','IMG_FILTER_SELECTIVE_BLUR':'','IMG_FILTER_MEAN_REMOVAL':'','IMG_FILTER_SMOOTH':'','IMG_FILTER_PIXELATE':'','IMG_FLIP_HORIZONTAL':'','IMG_FLIP_VERTICAL':'','IMG_FLIP_BOTH':'','IMG_GD2_RAW':'','IMG_GD2_COMPRESSED':'','IMG_EFFECT_REPLACE':'','IMG_EFFECT_ALPHABLEND':'','IMG_EFFECT_NORMAL':'','IMG_EFFECT_OVERLAY':'','PNG_NO_FILTER':'','PNG_ALL_FILTERS':'','IMG_NEAREST_NEIGHBOUR':'','IMG_BILINEAR_FIXED':'','IMG_BICUBIC':'','IMG_BICUBIC_FIXED':'','IMG_COLOR_BRUSHED':'','IMG_COLOR_STYLEDBRUSHED':'','IMG_BELL':'','IMG_BESSEL':'','IMG_BLACKMAN':'','IMG_BOX':'','IMG_BSPLINE':'','IMG_CATMULLROM':'','IMG_GAUSSIAN':'','IMG_GENERALIZED_CUBIC':'','IMG_HERMITE':'','IMG_HAMMING':'','IMG_HANNING':'','IMG_MITCHELL':'','IMG_POWER':'','IMG_QUADRATIC':'','IMG_SINC':'','IMG_WEIGHTED4':'','IMG_TRIANGLE':'','IMG_COLOR_STYLED':'','IMG_COLOR_TRANSPARENT':'','IMG_COLOR_TILED':'','IMG_GIF':'','IMG_JPG':'','IMG_PNG':'','IMG_WBMP':'','IMG_XPM':'','GD_VERSION':'','GD_MAJOR_VERSION':'','GD_MINOR_VERSION':'','GD_RELEASE_VERSION':'','GD_EXTRA_VERSION':'','GD_BUNDLED':'','IMG_JPEG':'','IMG_ARC_ROUNDED':'','IMAGETYPE_JPEG2000':'','PNG_FILTER_NONE':'','PNG_FILTER_SUB':'','PNG_FILTER_UP':'','PNG_FILTER_AVG':'','PNG_FILTER_PAETH':'',} +let php_builtin['constants']['json']={'JSON_BIGINT_AS_STRING':'','JSON_HEX_QUOT':'','JSON_HEX_TAG':'','JSON_HEX_AMP':'','JSON_HEX_APOS':'','JSON_NUMERIC_CHECK':'','JSON_PRETTY_PRINT':'','JSON_UNESCAPED_SLASHES':'','JSON_FORCE_OBJECT':'','JSON_UNESCAPED_UNICODE':'','JSON_ERROR_NONE':'','JSON_ERROR_DEPTH':'','JSON_ERROR_STATE_MISMATCH':'','JSON_ERROR_CTRL_CHAR':'','JSON_ERROR_SYNTAX':'','JSON_ERROR_UTF8':'','JSON_ERROR_RECURSION':'','JSON_ERROR_INF_OR_NAN':'','NAN':'','INF':'','JSON_ERROR_UNSUPPORTED_TYPE':'','JSON_PARTIAL_OUTPUT_ON_ERROR':'',} +let php_builtin['constants']['multibyte_string']={'MB_CASE_UPPER':'','MB_CASE_LOWER':'','MB_CASE_TITLE':'','MB_OVERLOAD_MAIL':'','MB_OVERLOAD_STRING':'','MB_OVERLOAD_REGEX':'',} +let php_builtin['constants']['mssql']={'SQLTEXT':'','SQLVARCHAR':'','SQLCHAR':'','SQLINT1':'','SQLINT2':'','SQLINT4':'','SQLBIT':'','SQLFLT4':'','SQLFLT8':'','SQLFLTN':'','MSSQL_ASSOC':'','MSSQL_NUM':'','MSSQL_BOTH':'',} +let php_builtin['constants']['mysql']={'MYSQL_CLIENT_SSL':'','MYSQL_CLIENT_COMPRESS':'','MYSQL_CLIENT_IGNORE_SPACE':'','MYSQL_CLIENT_INTERACTIVE':'','MYSQL_ASSOC':'','MYSQL_NUM':'','MYSQL_BOTH':'','MYSQL_PORT':'',} +let php_builtin['constants']['output_control']={'PHP_OUTPUT_HANDLER_STDFLAGS':'','PHP_OUTPUT_HANDLER_CLEANABLE':'','PHP_OUTPUT_HANDLER_FLUSHABLE':'','PHP_OUTPUT_HANDLER_REMOVABLE':'','PHP_OUTPUT_HANDLER_START':'','PHP_OUTPUT_HANDLER_WRITE':'','PHP_OUTPUT_HANDLER_FLUSH':'','PHP_OUTPUT_HANDLER_CLEAN':'','PHP_OUTPUT_HANDLER_FINAL':'','PHP_OUTPUT_HANDLER_CONT':'','PHP_OUTPUT_HANDLER_END':'',} +let php_builtin['constants']['password_hashing']={'PASSWORD_DEFAULT':'','PASSWORD_BCRYPT':'','CRYPT_BLOWFISH':'',} +let php_builtin['constants']['postgresql']={'PGSQL_CONNECT_FORCE_NEW':'','PGSQL_CONNECTION_OK':'','PGSQL_CONNECTION_BAD':'','PGSQL_CONV_IGNORE_DEFAULT':'','PGSQL_CONV_FORCE_NULL':'','PGSQL_CONV_IGNORE_NOT_NULL':'','PGSQL_DML_NO_CONV':'','PGSQL_DML_ESCAPE':'','PGSQL_DML_EXEC':'','PGSQL_DML_ASYNC':'','PGSQL_DML_STRING':'','PGSQL_ASSOC':'','PGSQL_NUM':'','PGSQL_BOTH':'','PGSQL_CONV_OPTS':'','INV_READ':'','INV_WRITE':'','INV_ARCHIVE':'','PGSQL_SEEK_SET':'','PGSQL_SEEK_CUR':'','PGSQL_SEEK_END':'','PGSQL_DIAG_SEVERITY':'','PGSQL_DIAG_SQLSTATE':'','PGSQL_DIAG_MESSAGE_PRIMARY':'','PGSQL_DIAG_MESSAGE_DETAIL':'','PGSQL_DIAG_MESSAGE_HINT':'','PGSQL_DIAG_STATEMENT_POSITION':'','PGSQL_DIAG_INTERNAL_POSITION':'','PGSQL_DIAG_INTERNAL_QUERY':'','PGSQL_DIAG_CONTEXT':'','PGSQL_DIAG_SOURCE_FILE':'','PGSQL_DIAG_SOURCE_LINE':'','PGSQL_DIAG_SOURCE_FUNCTION':'','PGSQL_STATUS_LONG':'','PGSQL_STATUS_STRING':'','PGSQL_EMPTY_QUERY':'','PGSQL_COMMAND_OK':'','PGSQL_TUPLES_OK':'','PGSQL_COPY_OUT':'','PGSQL_COPY_IN':'','PGSQL_BAD_RESPONSE':'','PGSQL_NONFATAL_ERROR':'','PGSQL_FATAL_ERROR':'','PGSQL_ERRORS_TERSE':'','PGSQL_ERRORS_DEFAULT':'','PGSQL_ERRORS_VERBOSE':'','PGSQL_TRANSACTION_IDLE':'','PGSQL_TRANSACTION_ACTIVE':'','PGSQL_TRANSACTION_INTRANS':'','PGSQL_TRANSACTION_INERROR':'','PGSQL_TRANSACTION_UNKNOWN':'','PG_DIAG_STATEMENT_POSITION':'','PG_DIAG_INTERNAL_QUERY':'',} +let php_builtin['constants']['pcre']={'PREG_GREP_INVERT':'','PREG_NO_ERROR':'','PREG_INTERNAL_ERROR':'','PREG_BACKTRACK_LIMIT_ERROR':'','PREG_RECURSION_LIMIT_ERROR':'','PREG_BAD_UTF8_ERROR':'','PREG_BAD_UTF8_OFFSET_ERROR':'','PREG_PATTERN_ORDER':'','PREG_SET_ORDER':'','PREG_OFFSET_CAPTURE':'','PREG_SPLIT_NO_EMPTY':'','PREG_SPLIT_DELIM_CAPTURE':'','PREG_SPLIT_OFFSET_CAPTURE':'','PCRE_VERSION':'',} +let php_builtin['constants']['program_execution']={'STDIN':'',} +let php_builtin['constants']['sessions']={'SID':'','PHP_SESSION_DISABLED':'','PHP_SESSION_NONE':'','PHP_SESSION_ACTIVE':'','UPLOAD_ERR_EXTENSION':'',} +let php_builtin['constants']['variable_handling']={'PHP_INT_MAX':'',} +let php_builtin['constants']['misc']={'WAIT_IO_COMPLETION':'','CONNECTION_ABORTED':'','CONNECTION_NORMAL':'','CONNECTION_TIMEOUT':'',} +let php_builtin['constants']['streams']={'STREAM_FILTER_READ':'','STREAM_FILTER_WRITE':'','STREAM_FILTER_ALL':'','PHP_INT_MAX':'','STREAM_CLIENT_CONNECT':'','STREAM_CLIENT_ASYNC_CONNECT':'','STREAM_CLIENT_PERSISTENT':'','STREAM_CRYPTO_METHOD_TLS_CLIENT':'','STREAM_CRYPTO_METHOD_TLS_SERVER':'','STREAM_PF_INET':'','STREAM_PF_INET6':'','STREAM_PF_UNIX':'','STREAM_SOCK_DGRAM':'','STREAM_SOCK_RAW':'','STREAM_SOCK_RDM':'','STREAM_SOCK_SEQPACKET':'','STREAM_SOCK_STREAM':'','STREAM_IPPROTO_ICMP':'','STREAM_IPPROTO_IP':'','STREAM_IPPROTO_RAW':'','STREAM_IPPROTO_TCP':'','STREAM_IPPROTO_UDP':'','STREAM_OOB':'','STREAM_PEEK':'','AF_INET':'','STREAM_SERVER_BIND':'','STREAM_SHUT_RD':'','STREAM_SHUT_WR':'','STREAM_SHUT_RDWR':'','STREAM_IS_URL':'','PSFS_PASS_ON':'','PSFS_FEED_ME':'','PSFS_ERR_FATAL':'','PSFS_FLAG_NORMAL':'','PSFS_FLAG_FLUSH_INC':'','PSFS_FLAG_FLUSH_CLOSE':'','STREAM_USE_PATH':'','STREAM_REPORT_ERRORS':'','STREAM_SERVER_LISTEN':'','STREAM_NOTIFY_RESOLVE':'','STREAM_NOTIFY_CONNECT':'','STREAM_NOTIFY_AUTH_REQUIRED':'','STREAM_NOTIFY_SEVERITY_ERR':'','STREAM_NOTIFY_MIME_TYPE_IS':'','STREAM_NOTIFY_FILE_SIZE_IS':'','STREAM_NOTIFY_REDIRECTED':'','STREAM_NOTIFY_PROGRESS':'','STREAM_NOTIFY_COMPLETED':'','STREAM_NOTIFY_FAILURE':'','STREAM_NOTIFY_AUTH_RESULT':'','STREAM_NOTIFY_SEVERITY_INFO':'','STREAM_NOTIFY_SEVERITY_WARN':'','STREAM_CAST_FOR_SELECT':'','STREAM_CAST_AS_STREAM':'','STREAM_META_TOUCH':'','STREAM_META_OWNER':'','STREAM_META_OWNER_NAME':'','STREAM_META_GROUP':'','STREAM_META_GROUP_NAME':'','STREAM_META_ACCESS':'','STREAM_MKDIR_RECURSIVE':'','LOCK_EX':'','LOCK_UN':'','LOCK_SH':'','LOCK_NB':'','SEEK_SET':'','SEEK_CUR':'','SEEK_END':'','STREAM_OPTION_BLOCKING':'','STREAM_OPTION_READ_TIMEOUT':'','STREAM_OPTION_WRITE_BUFFER':'','STREAM_BUFFER_NONE':'','STREAM_BUFFER_FULL':'',} +let php_builtin['constants']['iconv']={'ICONV_IMPL':'','ICONV_VERSION':'','ICONV_MIME_DECODE_STRICT':'','ICONV_MIME_DECODE_CONTINUE_ON_ERROR':'',} +let php_builtin['constants']['phpini_directives']={'PATH_SEPARATOR':'','PHP_INI_SYSTEM':'',} +let php_builtin['constants']['types']={'NAN':'','PHP_INT_SIZE':'','PHP_INT_MAX':'',} +let php_builtin['constants']['pdo']={'PDO_PARAM_BOOL':'',} +let php_builtin['constants']['list_of_reserved_words']={'PHP_VERSION':'','PHP_MAJOR_VERSION':'','PHP_MINOR_VERSION':'','PHP_RELEASE_VERSION':'','PHP_VERSION_ID':'','PHP_EXTRA_VERSION':'','PHP_ZTS':'','PHP_DEBUG':'','PHP_MAXPATHLEN':'','PHP_OS':'','PHP_SAPI':'','PHP_EOL':'','PHP_INT_MAX':'','PHP_INT_SIZE':'','DEFAULT_INCLUDE_PATH':'','PEAR_INSTALL_DIR':'','PEAR_EXTENSION_DIR':'','PHP_EXTENSION_DIR':'','PHP_PREFIX':'','PHP_BINDIR':'','PHP_BINARY':'','PHP_MANDIR':'','PHP_LIBDIR':'','PHP_DATADIR':'','PHP_SYSCONFDIR':'','PHP_LOCALSTATEDIR':'','PHP_CONFIG_FILE_PATH':'','PHP_CONFIG_FILE_SCAN_DIR':'','PHP_SHLIB_SUFFIX':'',} +let php_builtin['constants']['php_type_comparison_tables']={'NAN':'',} + +" Built in functions +let g:php_builtin_functions = {} +for [ext, data] in items(php_builtin['functions']) + call extend(g:php_builtin_functions, data) +endfor + +" Built in classs +let g:php_builtin_classes = {} +for [ext, data] in items(php_builtin['classes']) + call extend(g:php_builtin_classes, data) +endfor + +" Built in interfaces +let g:php_builtin_interfaces = {} +for [ext, data] in items(php_builtin['interfaces']) + call extend(g:php_builtin_interfaces, data) +endfor + +" Built in constants +let g:php_constants = {} +for [ext, data] in items(php_builtin['constants']) + call extend(g:php_constants, data) +endfor + +" When the classname not found or found but the tags dosen't contain that +" class we will try to complate any method of any builtin class. To speed up +" that lookup we compile a 'ClassName::MethodName':'info' dictionary from the +" builtin class informations +let g:php_builtin_object_functions = {} + +" When completing for 'everyting imaginable' (no class context, not a +" variable) we need a list of built-in classes in a format of {'classname':''} +" for performance reasons we precompile this too +let g:php_builtin_classnames = {} + +" In order to reduce file size, empty keys are omitted from class structures. +" To make the structure of in-memory hashes normalized we will add them in runtime +let required_class_hash_keys = ['constants', 'properties', 'static_properties', 'methods', 'static_methods'] + +for [classname, class_info] in items(g:php_builtin_classes) + for property_name in required_class_hash_keys + if !has_key(class_info, property_name) + let class_info[property_name] = {} + endif + endfor + + let g:php_builtin_classnames[class_info.name] = '' + for [method_name, method_info] in items(class_info.methods) + let g:php_builtin_object_functions[classname.'::'.method_name.'('] = method_info.signature + endfor + for [method_name, method_info] in items(class_info.static_methods) + let g:php_builtin_object_functions[classname.'::'.method_name.'('] = method_info.signature + endfor +endfor + +let g:php_builtin_interfacenames = {} +for [interfacename, info] in items(g:php_builtin_interfaces) + for property_name in required_class_hash_keys + if !has_key(class_info, property_name) + let class_info[property_name] = {} + endif + endfor + + let g:php_builtin_interfacenames[interfacename] = '' + for [method_name, method_info] in items(class_info.methods) + let g:php_builtin_object_functions[classname.'::'.method_name.'('] = method_info.signature + endfor + for [method_name, method_info] in items(class_info.static_methods) + let g:php_builtin_object_functions[classname.'::'.method_name.'('] = method_info.signature + endfor +endfor + + " Add control structures (they are outside regular pattern of PHP functions) let php_control = { \ 'include(': 'string filename | resource', @@ -5147,6 +2527,31 @@ let php_control = { \ 'require_once(': 'string filename | resource', \ } call extend(g:php_builtin_functions, php_control) + + +" Built-in variables " {{{ +let g:php_builtin_vars ={ + \ '$GLOBALS':'', + \ '$_SERVER':'', + \ '$_GET':'', + \ '$_POST':'', + \ '$_COOKIE':'', + \ '$_FILES':'', + \ '$_ENV':'', + \ '$_REQUEST':'', + \ '$_SESSION':'', + \ '$HTTP_SERVER_VARS':'', + \ '$HTTP_ENV_VARS':'', + \ '$HTTP_COOKIE_VARS':'', + \ '$HTTP_GET_VARS':'', + \ '$HTTP_POST_VARS':'', + \ '$HTTP_POST_FILES':'', + \ '$HTTP_SESSION_VARS':'', + \ '$php_errormsg':'', + \ '$this':'', + \ } +" }}} endfunction " }}} -" vim:set foldmethod=marker: + +" vim: foldmethod=marker:noexpandtab:ts=8:sts=4 |