changeset 5734:657ade71d395

Updated runtime files.
author Bram Moolenaar <bram@vim.org>
date Sat, 22 Mar 2014 21:02:50 +0100
parents 531652f741a5
children 50dbef5e774a
files runtime/autoload/netrw.vim runtime/autoload/phpcomplete.vim runtime/colors/delek.vim runtime/colors/industry.vim runtime/doc/eval.txt runtime/doc/index.txt runtime/doc/os_vms.txt runtime/doc/pi_netrw.txt runtime/doc/quickfix.txt runtime/doc/tags runtime/doc/todo.txt runtime/ftplugin/clojure.vim runtime/ftplugin/j.vim runtime/indent/clojure.vim runtime/indent/j.vim runtime/plugin/netrwPlugin.vim runtime/syntax/euphoria4.vim runtime/syntax/j.vim runtime/syntax/netrw.vim runtime/syntax/sh.vim runtime/syntax/tex.vim runtime/syntax/vim.vim runtime/syntax/yacc.vim
diffstat 23 files changed, 4995 insertions(+), 7028 deletions(-) [+]
line wrap: on
line diff
--- 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"      
 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:N
 " ==============================
 
 " ---------------------------------------------------------------------
-" 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
 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)")
-  endif
+"   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.">")
-   else
-"    call Decho("(Explore) ..case a:1: pattern or filepattern")
+"    call Decho("..using user-specified dirname<".dirname.">")
+   else
+"    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("(Explore) ....calling LocalBrowseCheck(newdir<".newdir.">)")
+"    call Decho("....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)
-
-   else
-"    call Decho("(Explore) ..your vim does not have +path_extra")
+"    call Decho("....explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
+
+   else
+"    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")
-  endif
-
-  sil! let @* = keepregstar
-  sil! let @+ = keepregstar
+"   call Decho("cleared explore match list")
+  endif
+
+  " 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
+  if exists("g:netrw_chgwin") && g:netrw_chgwin == -1
+   let g:netrw_chgwin= 2
+  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
-  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")
-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")
-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")
-endfun
-
-" ------------------------------------------------------------------------
-" netrw#NetrwObtain: {{{2
-"   netrw#NetrwObtain(islocal,fname[,tgtdirectory])
+"  call Dret("netrw#Clean")
+endfun
+
+" ---------------------------------------------------------------------
+" 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#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, meth
 
   " 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, meth
 "   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, meth
 
   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, meth
  " 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
-
-"  call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+  " However, s:NetrwBrowse() causes the FocusGained event to fire the firstt time.
+
+"  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)).">")
-   endif
-"   call Decho("(NetrwGetBuffer)   named enew buffer#".bufnr("%")."<".bufname("%").">")
+"    call Decho("  errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
+   endif
+"   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')
-  else
-   let dirname= b:netrw_curdir
+   let dirname = substitute(b:netrw_curdir,'\\','/','ge')
+  else
+   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()
-
-"   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)
+   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.">")
+
    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.">)")
-   else
-"    call Decho("(NetrwBrowseChgDir:restore) doing modification lockout settings: ma nomod ro")
-"    call Decho("(NetrwBrowseChgDir:restore) setl ma nomod noro")
+"    call Decho("restore: ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+   else
+"    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)
-   else
-    let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc).trailer
+    let s:netrwmarkfilemtch_{curbufnr}= leader.escape(a:fname,g:netrw_markfileesc)
+   else
+    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.">")
-   else
-"    call Decho("(s:NetrwTreeDir) do not extract tree subdirectory from current line and set treedir to empty")
+"    call Decho("treedir<".treedir.">")
+   else
+"    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()
-  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.")")
+   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
 
   " 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) r
 
   " 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)
-   endif
-
+    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,172 +9090,35 @@ 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
-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)
-
-"  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.")")
-
-  " 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)
-
-  if g:netrw_cygwin == 0 && (has("win32") || has("win95") || has("win64") || has("win16"))
-"   call Decho("(LocalListing) filelist=".string(filelist))
-  elseif index(filelist,'..') == -1 && b:netrw_curdir !~ '/'
-    " include ../ in the glob() entry if its missing
-"   call Decho("(LocalListing) forcibly including on \"..\"")
-   let filelist= filelist+[s:ComposePath(b:netrw_curdir,"../")]
-"   call Decho("(LocalListing) 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))
-
-  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)
-  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.")")
-
-  for filename in filelist
-"   call Decho("(LocalListing)  ")
-"   call Decho("(LocalListing) 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 @")
-    let pfile= filename."@"
-
-   elseif getftype(filename) == "socket"
-    " indicate a socket
-"    call Decho("(LocalListing) 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 |")
-    let pfile= filename."|"
-
-   elseif isdirectory(filename)
-    " indicate a directory
-"    call Decho("(LocalListing) 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 *")
-      let pfile= filename."*"
-     else
-      " normal file
-      let pfile= filename
-     endif
-    elseif executable(filename)
-     " indicate an executable
-"     call Decho("(LocalListing) indicate <".filename."> is executable with trailing *")
-     let pfile= filename."*"
-    else
-     " normal file
-     let pfile= filename
-    endif
-
-   else
-    " normal file
-    let pfile= filename
-   endif
-"   call Decho("(LocalListing) pfile<".pfile."> (after *@/ appending)")
-
-   if pfile =~ '//$'
-    let pfile= substitute(pfile,'//$','/','e')
-"    call Decho("(LocalListing) 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.">")
-
-   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)
-   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))
-    let t  = getftime(filename)
-    let ft = strpart("000000000000000000",1,18-strlen(t)).t
-"    call Decho("(LocalListing) 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))
-    let sz   = getfsize(filename)
-    let fsz  = strpart("000000000000000000",1,18-strlen(sz)).sz
-"    call Decho("(LocalListing) exe keepj put ='".fsz.'/'.filename."'")
-    let fszpfile= fsz.'/'.pfile
-    sil! keepj put =fszpfile
-
-   else
-    " sort by name
-"    call Decho("(LocalListing) exe keepjumps put ='".pfile."'")
-    sil! keepj put=pfile
-   endif
-  endfor
-
-  " cleanup any windows mess at end-of-line
-  sil! keepj g/^$/d
-  sil! keepj %s/\r$//e
-  call histdel("/",-1)
-"  call Decho("(LocalListing) 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
+"  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:LocalBrowseShellCmdRefresh()
-"  call Dfunc("LocalBrowseShellCmdRefresh() browselist=".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "empty")." ".tabpagenr("$")." tabs")
+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("LocalBrowseShellCmdRefresh : browselist is empty")
+"   call Dret("s:LocalBrowseRefresh : browselist is empty")
    return
   endif
   if !exists("w:netrw_bannercnt")
-"   call Dret("LocalBrowseShellCmdRefresh : don't refresh when focus not on netrw window")
+"   call Dret("s:LocalBrowseRefresh : 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
+  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 = []
@@ -8932,26 +9128,32 @@ fun! s:LocalBrowseShellCmdRefresh()
    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) : "").">")
+"  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("(LocalBrowseShellCmdRefresh) bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf))
+"   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("(LocalBrowseShellCmdRefresh) wiping  buf#".ibuf,"<".bufname(ibuf).">")
+"    call Decho("wiping  buf#".ibuf,"<".bufname(ibuf).">")
     exe "sil! bd ".fnameescape(ibuf)
     call remove(s:netrw_browselist,ibl)
-"    call Decho("(LocalBrowseShellCmdRefresh) browselist=".string(s:netrw_browselist))
+"    call Decho("browselist=".string(s:netrw_browselist))
     continue
    elseif index(tabpagebuflist(),ibuf) != -1
     " refresh any netrw buffer
-"    call Decho("(LocalBrowseShellCmdRefresh) refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
+"    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
@@ -8959,7 +9161,7 @@ fun! s:LocalBrowseShellCmdRefresh()
   exe curwin."wincmd w"
   let @@= ykeep
 
-"  call Dret("LocalBrowseShellCmdRefresh")
+"  call Dret("s:LocalBrowseRefresh")
 endfun
 
 " ---------------------------------------------------------------------
@@ -8973,21 +9175,30 @@ endfun
 "
 "  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)
+"                       (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."  s:netrw_browser_shellcmd ".(exists("s:netrw_browser_shellcmd")? "exists" : "does not exist"))
+"  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("(LocalFastBrowser) initialize 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("(LocalFastBrowser) appendng current buffer to browselist")
+"   call Decho("appendng current buffer to browselist")
    call add(s:netrw_browselist,bufnr("%"))
-"   call Decho("(LocalFastBrowser) browselist=".string(s:netrw_browselist))
+"   call Decho("browselist=".string(s:netrw_browselist))
   endif
 
   " enable autocmd events to handle refreshing/removing local browser buffers
@@ -8996,36 +9207,173 @@ fun! s:LocalFastBrowser()
   "    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
+  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("(LocalFastBrowser) autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()")
-     au ShellCmdPost			*	call s:LocalBrowseShellCmdRefresh()
+"     call Decho("installing autocmd: ShellCmdPost")
+     au ShellCmdPost			*	call s:LocalBrowseRefresh()
     else
-     au ShellCmdPost,FocusGained	*	call s:LocalBrowseShellCmdRefresh()
-"     call Decho("(LocalFastBrowser) autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()")
+"     call Decho("installing autocmds: ShellCmdPost FocusGained")
+     au ShellCmdPost,FocusGained	*	call s:LocalBrowseRefresh()
     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
+  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! AuNetrwShellCmd
+   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("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('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("filelist=".filelist)
+
+  if g:netrw_cygwin == 0 && (has("win32") || has("win95") || has("win64") || has("win16"))
+"   call Decho("filelist=".string(filelist))
+  elseif index(filelist,'..') == -1 && b:netrw_curdir !~ '/'
+    " include ../ in the glob() entry if its missing
+"   call Decho("forcibly including on \"..\"")
+   let filelist= filelist+[s:ComposePath(b:netrw_curdir,"../")]
+"   call Decho("filelist=".string(filelist))
+  endif
+
+"  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("dynamic_maxfilenamelen: filenames             =".string(filelistcopy))
+"   call Decho("dynamic_maxfilenamelen: g:netrw_maxfilenamelen=".g:netrw_maxfilenamelen)
+  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.")")
+
+  for filename in filelist
+"   call Decho(" ")
+"   call Decho("for filename in filelist: filename<".filename.">")
+
+   if getftype(filename) == "link"
+    " indicate a symbolic link
+"    call Decho("indicate <".filename."> is a symbolic link with trailing @")
+    let pfile= filename."@"
+
+   elseif getftype(filename) == "socket"
+    " indicate a socket
+"    call Decho("indicate <".filename."> is a socket with trailing =")
+    let pfile= filename."="
+
+   elseif getftype(filename) == "fifo"
+    " indicate a fifo
+"    call Decho("indicate <".filename."> is a fifo with trailing |")
+    let pfile= filename."|"
+
+   elseif isdirectory(filename)
+    " indicate a directory
+"    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("indicate <".filename."> is executable with trailing *")
+      let pfile= filename."*"
+     else
+      " normal file
+      let pfile= filename
+     endif
+    elseif executable(filename)
+     " indicate an executable
+"     call Decho("indicate <".filename."> is executable with trailing *")
+     let pfile= filename."*"
+    else
+     " normal file
+     let pfile= filename
+    endif
+
+   else
+    " normal file
+    let pfile= filename
+   endif
+"   call Decho("pfile<".pfile."> (after *@/ appending)")
+
+   if pfile =~ '//$'
+    let pfile= substitute(pfile,'//$','/','e')
+"    call Decho("change // to /: pfile<".pfile.">")
+   endif
+   let pfile= strpart(pfile,dirnamelen)
+   let pfile= substitute(pfile,'^[/\\]','','e')
+"   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("sz=".sz." fsz=".fsz)
+   endif
+
+   if     g:netrw_sort_by =~ "^t"
+    " sort by time (handles time up to 1 quintillion seconds, US)
+"    call Decho("getftime(".filename.")=".getftime(filename))
+    let t  = getftime(filename)
+    let ft = strpart("000000000000000000",1,18-strlen(t)).t
+"    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("getfsize(".filename.")=".getfsize(filename))
+    let sz   = getfsize(filename)
+    let fsz  = strpart("000000000000000000",1,18-strlen(sz)).sz
+"    call Decho("exe keepj put ='".fsz.'/'.filename."'")
+    let fszpfile= fsz.'/'.pfile
+    sil! keepj put =fszpfile
+
+   else
+    " sort by name
+"    call Decho("exe keepjumps put ='".pfile."'")
+    sil! keepj put=pfile
+   endif
+  endfor
+
+  " cleanup any windows mess at end-of-line
+  sil! keepj g/^$/d
+  sil! keepj %s/\r$//e
+  call histdel("/",-1)
+"  call Decho("exe setl ts=".(g:netrw_maxfilenamelen+1))
+  exe "setl ts=".(g:netrw_maxfilenamelen+1)
+
+"  call Dret("s:LocalListing")
+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,6 +9627,95 @@ endfun
 " Support Functions: {{{1
 
 " ---------------------------------------------------------------------
+" 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#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
+  setl ei=all
+  if expand("%") == "NetrwMessage"
+   if exists("s:winBeforeErr")
+    exe s:winBeforeErr."wincmd w"
+   endif
+  endif
+
+  if a:0 > 0
+   exe "keepj ".a:1
+  endif
+
+  " restore window
+  if exists("w:netrw_winnr")
+"   call Decho("restore window: exe sil! ".w:netrw_winnr."wincmd w")
+   exe "sil! ".w:netrw_winnr."wincmd w"
+  endif
+  if v:shell_error == 0
+   " as suggested by Bram M: redraw on no error
+   " allows protocol error messages to remain visible
+"   redraw!
+  endif
+
+  " restore top-of-screen line
+  if exists("w:netrw_hline")
+"   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("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#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#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("currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col)
+
+  " Save top-of-screen line
+  keepj norm! H0
+  let w:netrw_hline= line(".")
+
+  " 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#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#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.">)")
@@ -9299,95 +9736,6 @@ fun! netrw#WinPath(path)
 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))
-  let eikeep= &ei
-  set ei=all
-  if expand("%") == "NetrwMessage"
-   if exists("s:winBeforeErr")
-    exe s:winBeforeErr."wincmd w"
-   endif
-  endif
-
-  if a:0 > 0
-   exe "keepj ".a:1
-  endif
-
-  " restore window
-  if exists("w:netrw_winnr")
-"   call Decho("(NetrwRestorePosn) restore window: exe sil! ".w:netrw_winnr."wincmd w")
-   exe "sil! ".w:netrw_winnr."wincmd w"
-  endif
-  if v:shell_error == 0
-   " as suggested by Bram M: redraw on no error
-   " allows protocol error messages to remain visible
-"   redraw!
-  endif
-
-  " restore top-of-screen line
-  if exists("w:netrw_hline")
-"   call Decho("(NetrwRestorePosn) 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."|")
-   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())
-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())
-  " 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)
-
-  " Save top-of-screen line
-  keepj norm! H0
-  let w:netrw_hline= line(".")
-
-  " 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"))
-  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
-endfun
-
-" ---------------------------------------------------------------------
 "  s:ComposePath: Appends a new part to a path taking different systems into consideration {{{2
 fun! s:ComposePath(base,subdir)
 "  call Dfunc("s:ComposePath(base<".a:base."> subdir<".a:subdir.">)")
@@ -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.">")
-  if !exists("w:netrw_rexlocal")
-"   call Dret("s:NetrwRexplore() w:netrw_rexlocal doesn't exist")
+"  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
-"  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)
+
+  " 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 (".&ft.")")
+   return
+  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)
   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")
-  endif
+"   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
 
 " ---------------------------------------------------------------------
--- 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 )
+"
+"	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:
-"   - 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
+"	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
 
-function! phpcomplete#CompletePHP(findstart, base)
+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(findst
 			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]
+			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
 
-	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 = []
-	" a:base is very short - we need context
-	if exists("b:compl_context")
-		let context = b:compl_context
-		unlet! b:compl_context
-	endif
 
 	if !exists('g:php_builtin_functions')
 		call phpcomplete#LoadData()
 	endif
 
-	let scontext = substitute(context, '\$\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*$', '', '')
+	" a:base is very short - we need context
+	if exists("b:compl_context")
+		let context = b:compl_context
+		unlet! b:compl_context
+		" 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 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] = ''
-			endif
-		endfor
+	let [current_namespace, imports] = phpcomplete#GetCurrentNameSpace(getline(0, line('.')))
+
+	if context =~? '^use\s'
+		return phpcomplete#CompleteUse(a:base)
+	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 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
-		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
+			let classlocation = phpcomplete#GetClassLocation(classname, namespace)
+		else
+			let classlocation = ''
 		endif
 
-		let classes = sort(keys(int_classes))
-		let classes += sort(keys(ext_classes))
-		let classes += sort(keys(g:php_omni_bi_classes))
-
-		for m in classes
-			if m =~ '^'.a:base
-				call add(res, m)
-			endif
-		endfor
-
-		let final_menu = []
-		for i in res
-			let final_menu += [{'word':i, 'kind':'c'}]
-		endfor
-
-		return final_menu
-
-	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)
-
-		if scontext =~ '->$' && scontext !~ '\$this->$'
-
-			" Get name of the class
-			let classname = phpcomplete#GetClassName(scontext)
-
-			" 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
-
-			if classlocation == 'VIMPHP_BUILTINOBJECT'
-
-				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
-
-				return res
-
+		if classlocation != ''
+			if classlocation == 'VIMPHP_BUILTINOBJECT' && has_key(g:php_builtin_classes, tolower(classname))
+				return phpcomplete#CompleteBuiltInClass(context, classname, a:base)
 			endif
 
 			if filereadable(classlocation)
 				let classfile = readfile(classlocation)
 				let classcontent = ''
-				let classcontent .= "\n".phpcomplete#GetClassContents(classfile, classname)
+				let classcontent .= "\n".phpcomplete#GetClassContents(classlocation, classname)
 				let sccontent = split(classcontent, "\n")
-
-				" 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
-					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
-				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
-				endfor
-
-				let start_list = res + res2
+				let visibility = expand('%:p') == fnamemodify(classlocation, ':p') ? 'private' : 'public'
 
-				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'}]
-					endif
-				endfor
-
-				return final_list
-
-			endif
-
-		endif
-
-		if a:base =~ '^\$'
-			let adddollar = '$'
-		else
-			let adddollar = ''
-		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]*').'->'
-			else
-				let val = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*')
-			endif
-			if val !~ ''
-				let int_vars[adddollar.val] = ''
-			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
+				return phpcomplete#CompleteUserClass(context, a:base, sccontent, visibility)
 			endif
 		endif
 
-		" Now we have all variables in int_vars dictionary
-		call extend(int_vars, ext_vars)
+		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
+
+	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
 
-		" Internal solution for finding functions in current file.
-		let file = getline(1, '$')
-		call filter(file,
+		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
+
+	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 res
+endfunction
+" }}}
+
+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
+
+	" Internal solution for finding functions in current file.
+
+	if a:base =~? '^\'
+		let leading_slash = '\'
+	else
+		let leading_slash = ''
+	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 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,
+	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*{')
+						\ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*\({\|$\)')
 			let int_functions[f_name.'('] = f_args.')'
-		endfor
+		endif
+	endfor
+
+	" 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
+
+	" 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
+
+	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 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
 
-		" 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
+				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
+
+				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
+				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
+				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
+				endif
+
+				if key != ''
+					if tag.kind ==? 'c'
+						let ext_classes[key] = info
+					elseif tag.kind ==? 'i'
+						let ext_interfaces[key] = info
+					endif
+				endif
 			endif
 		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 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 =~ '^\\[^\\]*$')
 
-		for m in sort(keys(all_values))
-			if m =~ '\(^\|::\)'.a:base
-				call add(res, m)
+		" 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
+
+	" 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
 
-		let start_list = res
+	for [function_name, info] in items(g:php_builtin_functions)
+		if function_name =~? '^'.base
+			let builtin_functions[leading_slash.function_name] = info
+		endif
+	endfor
+
+	" All constants
+	call extend(int_constants, ext_constants)
 
-		let final_list = []
-		for i in start_list
-			if has_key(int_vars, i)
-				let class = ' '
-				if all_values[i] != ''
-					let class = i.' class '
+	" 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
-				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'}]
+			endif
+
+			" no builtin interfaces
+			if import.kind == 'n'
+				let ext_namespaces[imported_name.'\'] = ' '.import.name.' - '.import.filename
 			endif
-		endfor
+		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)
 
-		return final_list
+	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 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 =~ '^\$'
-		" 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':''
-								\ }
-		" }}}
+		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
+	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 prototype = matchstr(tag.cmd,
+						\ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?')
+			endif
+			let ext_functions[item.'('] = prototype.') - '.tag['filename']
+		endif
+	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
+" }}}
+
+function! phpcomplete#CompleteVariable(base) " {{{
+	let res = []
+
+	" 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
+
+	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 int_list = res
 
-		" 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 int_dict = []
+	for i in int_list
+		if int_vars[i] != ''
+			let class = ' '
+			if int_vars[i] != ''
+				let class = i.' class '
 			endif
-			if val != ''
-				let int_vars[val] = ''
+			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
+
+	return int_dict
+endfunction
+" }}}
+
+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
+
+		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
+
+	" 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
+
+	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
 		endfor
 
-		call extend(int_vars,g:php_builtin_vars)
-
-		" 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
-			endif
-		endif
-
-		call extend(int_vars, ext_vars)
-		let g:a0 = keys(int_vars)
-
-		for m in sort(keys(int_vars))
-			if m =~ '^\'.a:base
-				call add(res, m)
-			endif
-		endfor
-
-		let int_list = res
-
-		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'}]
+		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
 
-		return int_dict
+		" anything that is not explicitly required or prohibited is allowed
+		return 1
+	endif
+endfunction
+" }}}
+
+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
 
-	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
+	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
+
+	" 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
+
+	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
+			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 constants = filter(deepcopy(a:sccontent),
+				\ 'v:val =~ "^\\s*const\\s\\+"')
+
+	let jcons = join(constants, ' ')
+	let scons = split(jcons, 'const')
 
-		" 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 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 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
+" }}}
+
+function! phpcomplete#GetTaglist(pattern) " {{{
+
+	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)
+		" 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
 
-		" 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
-			endif
-		endfor
-
-		" 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
+			elseif current_char == '['
+				let bracket_depth += 1
+			elseif current_char == ']'
+				let bracket_depth -= 1
 			endif
 		endif
 
-		" All constants
-		call extend(int_constants, ext_constants)
-		" Treat keywords as constants
+		" 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 all_values = {}
+		let instruction = current_char.instruction
 
-		" One big dictionary of functions
-		call extend(all_values, int_functions)
+		" 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
 
-		" Add constants
-		call extend(all_values, int_constants)
-		" Add keywords
-		call extend(all_values, g:php_keywords)
+	" 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
 
-		for m in sort(keys(all_values))
-			if m =~ '^'.a:base
-				call add(res, m)
+	" 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
-		endfor
+			if instruction[i] == ')'
+				let depth -= 1
+			endif
+			if depth == 0
+				break
+			end
+			let i += 1
+		endwhile
+		let instruction = instruction[i + 1 : len(instruction)]
+	endif
 
-		let int_list = res
+	" trim whitespace from the ends
+	let instruction = substitute(instruction, '\v^(^\s+)|(\s+)$', '', 'g')
+
+	return instruction
+endfunction " }}}
 
-		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}]
-			endif
-		endfor
+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()->
 
-		return final_list
+	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
 
-endfunction
+	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
+
+		elseif filereadable(classlocation)
+			" Read the next method from the stack and extract only the name
+
+			let classcontents = phpcomplete#GetCachedClassContents(classlocation, classname_candidate)
+
+			" 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
+
+					return phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, a:imports, methodstack)
+				endif
+			endif
 
-function! phpcomplete#GetClassName(scontext) " {{{
+			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 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
+		endif
+
+		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(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 ''
-		endif
-		" And only one class location
-		if classlocation != ''
-			let classlocation = fhead.classlocation
-			return classlocation
-		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
 	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#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
+" }}}
+
+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
+" }}}
+
+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':'',
-\ '__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': '',
-\ }
-" }}}
-" 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 &#38;array | mixed',
-\ 'array_product(': 'array array | number',
-\ 'array_push(': 'array &#38;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 &#38;array | mixed',
-\ 'array_slice(': 'array array, int offset [, int length [, bool preserve_keys]] | array',
-\ 'array_splice(': 'array &#38;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 &#38;array, mixed var [, mixed ...] | int',
-\ 'array_values(': 'array input | array',
-\ 'array_walk(': 'array &#38;array, callback funcname [, mixed userdata] | bool',
-\ 'array_walk_recursive(': 'array &#38;input, callback funcname [, mixed userdata] | bool',
-\ 'arsort(': 'array &#38;array [, int sort_flags] | bool',
-\ 'ascii2ebcdic(': 'string ascii_str | int',
-\ 'asinh(': 'float arg | float',
-\ 'asin(': 'float arg | float',
-\ 'asort(': 'array &#38;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 &#38;obj, array paramarr | mixed',
-\ 'call_user_method(': 'string method_name, object &#38;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 &#38;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 &#38;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 &#38;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 &#38;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 &#38;result | int',
-\ 'dbplus_last(': 'resource relation, array &#38;tuple | int',
-\ 'dbplus_lockrel(': 'resource relation | int',
-\ 'dbplus_next(': 'resource relation, array &#38;tuple | int',
-\ 'dbplus_open(': 'string name | resource',
-\ 'dbplus_prev(': 'resource relation, array &#38;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 &#38;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 &#38;mxhosts [, array &#38;weight] | bool',
-\ 'dns_get_record(': 'string hostname [, int type [, array &#38;authns, array &#38;addtl]] | array',
-\ 'DomDocument-&#62;add_root(': 'string name | domelement',
-\ 'DomDocument-&#62;create_attribute(': 'string name, string value | domattribute',
-\ 'DomDocument-&#62;create_cdata_section(': 'string content | domcdata',
-\ 'DomDocument-&#62;create_comment(': 'string content | domcomment',
-\ 'DomDocument-&#62;create_element(': 'string name | domelement',
-\ 'DomDocument-&#62;create_element_ns(': 'string uri, string name [, string prefix] | domelement',
-\ 'DomDocument-&#62;create_entity_reference(': 'string content | domentityreference',
-\ 'DomDocument-&#62;create_processing_instruction(': 'string content | domprocessinginstruction',
-\ 'DomDocument-&#62;create_text_node(': 'string content | domtext',
-\ 'DomDocument-&#62;doctype(': 'void  | domdocumenttype',
-\ 'DomDocument-&#62;document_element(': 'void  | domelement',
-\ 'DomDocument-&#62;dump_file(': 'string filename [, bool compressionmode [, bool format]] | string',
-\ 'DomDocument-&#62;dump_mem(': '[bool format [, string encoding]] | string',
-\ 'DomDocument-&#62;get_element_by_id(': 'string id | domelement',
-\ 'DomDocument-&#62;get_elements_by_tagname(': 'string name | array',
-\ 'DomDocument-&#62;html_dump_mem(': 'void  | string',
-\ 'DomDocument-&#62;xinclude(': 'void  | int',
-\ 'dom_import_simplexml(': 'SimpleXMLElement node | DOMElement',
-\ 'DomNode-&#62;append_sibling(': 'domelement newnode | domelement',
-\ 'DomNode-&#62;attributes(': 'void  | array',
-\ 'DomNode-&#62;child_nodes(': 'void  | array',
-\ 'DomNode-&#62;clone_node(': 'void  | domelement',
-\ 'DomNode-&#62;dump_node(': 'void  | string',
-\ 'DomNode-&#62;first_child(': 'void  | domelement',
-\ 'DomNode-&#62;get_content(': 'void  | string',
-\ 'DomNode-&#62;has_attributes(': 'void  | bool',
-\ 'DomNode-&#62;has_child_nodes(': 'void  | bool',
-\ 'DomNode-&#62;insert_before(': 'domelement newnode, domelement refnode | domelement',
-\ 'DomNode-&#62;is_blank_node(': 'void  | bool',
-\ 'DomNode-&#62;last_child(': 'void  | domelement',
-\ 'DomNode-&#62;next_sibling(': 'void  | domelement',
-\ 'DomNode-&#62;node_name(': 'void  | string',
-\ 'DomNode-&#62;node_type(': 'void  | int',
-\ 'DomNode-&#62;node_value(': 'void  | string',
-\ 'DomNode-&#62;owner_document(': 'void  | domdocument',
-\ 'DomNode-&#62;parent_node(': 'void  | domnode',
-\ 'DomNode-&#62;prefix(': 'void  | string',
-\ 'DomNode-&#62;previous_sibling(': 'void  | domelement',
-\ 'DomNode-&#62;remove_child(': 'domtext oldchild | domtext',
-\ 'DomNode-&#62;replace_child(': 'domelement oldnode, domelement newnode | domelement',
-\ 'DomNode-&#62;replace_node(': 'domelement newnode | domelement',
-\ 'DomNode-&#62;set_content(': 'string content | bool',
-\ 'DomNode-&#62;set_name(': 'void  | bool',
-\ 'DomNode-&#62;set_namespace(': 'string uri [, string prefix] | void',
-\ 'DomNode-&#62;unlink_node(': 'void  | void',
-\ 'domxml_new_doc(': 'string version | DomDocument',
-\ 'domxml_open_file(': 'string filename [, int mode [, array &#38;error]] | DomDocument',
-\ 'domxml_open_mem(': 'string str [, int mode [, array &#38;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 &#38;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 &#38;array | mixed',
-\ 'ereg(': 'string pattern, string string [, array &#38;regs] | int',
-\ 'eregi(': 'string pattern, string string [, array &#38;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 &#38;output [, int &#38;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 &#38;width [, int &#38;height [, int &#38;imagetype]]] | string',
-\ 'exit(': '[string status] | void',
-\ 'expect_expectl(': 'resource expect, array cases, string &#38;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 &#38;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 &#38;...] | mixed',
-\ 'fseek(': 'resource handle, int offset [, int whence] | int',
-\ 'fsockopen(': 'string target [, int port [, int &#38;errno [, string &#38;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 &#38;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 &#38;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 &#38;mxhosts [, array &#38;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 &#38;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 &#38;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 &#38;file [, int &#38;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-&#62;key(': 'void  | string',
-\ 'hw_api_attribute-&#62;langdepvalue(': 'string language | string',
-\ 'hw_api_attribute-&#62;value(': 'void  | string',
-\ 'hw_api_attribute-&#62;values(': 'void  | array',
-\ 'hw_api-&#62;checkin(': 'array parameter | bool',
-\ 'hw_api-&#62;checkout(': 'array parameter | bool',
-\ 'hw_api-&#62;children(': 'array parameter | array',
-\ 'hw_api-&#62;content(': 'array parameter | HW_API_Content',
-\ 'hw_api_content-&#62;mimetype(': 'void  | string',
-\ 'hw_api_content-&#62;read(': 'string buffer, int len | string',
-\ 'hw_api-&#62;copy(': 'array parameter | hw_api_object',
-\ 'hw_api-&#62;dbstat(': 'array parameter | hw_api_object',
-\ 'hw_api-&#62;dcstat(': 'array parameter | hw_api_object',
-\ 'hw_api-&#62;dstanchors(': 'array parameter | array',
-\ 'hw_api-&#62;dstofsrcanchor(': 'array parameter | hw_api_object',
-\ 'hw_api_error-&#62;count(': 'void  | int',
-\ 'hw_api_error-&#62;reason(': 'void  | HW_API_Reason',
-\ 'hw_api-&#62;find(': 'array parameter | array',
-\ 'hw_api-&#62;ftstat(': 'array parameter | hw_api_object',
-\ 'hwapi_hgcsp(': 'string hostname [, int port] | HW_API',
-\ 'hw_api-&#62;hwstat(': 'array parameter | hw_api_object',
-\ 'hw_api-&#62;identify(': 'array parameter | bool',
-\ 'hw_api-&#62;info(': 'array parameter | array',
-\ 'hw_api-&#62;insertanchor(': 'array parameter | hw_api_object',
-\ 'hw_api-&#62;insertcollection(': 'array parameter | hw_api_object',
-\ 'hw_api-&#62;insertdocument(': 'array parameter | hw_api_object',
-\ 'hw_api-&#62;insert(': 'array parameter | hw_api_object',
-\ 'hw_api-&#62;link(': 'array parameter | bool',
-\ 'hw_api-&#62;lock(': 'array parameter | bool',
-\ 'hw_api-&#62;move(': 'array parameter | bool',
-\ 'hw_api_content(': 'string content, string mimetype | HW_API_Content',
-\ 'hw_api_object-&#62;assign(': 'array parameter | bool',
-\ 'hw_api_object-&#62;attreditable(': 'array parameter | bool',
-\ 'hw_api-&#62;objectbyanchor(': 'array parameter | hw_api_object',
-\ 'hw_api_object-&#62;count(': 'array parameter | int',
-\ 'hw_api-&#62;object(': 'array parameter | hw_api_object',
-\ 'hw_api_object-&#62;insert(': 'HW_API_Attribute attribute | bool',
-\ 'hw_api_object(': 'array parameter | hw_api_object',
-\ 'hw_api_object-&#62;remove(': 'string name | bool',
-\ 'hw_api_object-&#62;title(': 'array parameter | string',
-\ 'hw_api_object-&#62;value(': 'string name | string',
-\ 'hw_api-&#62;parents(': 'array parameter | array',
-\ 'hw_api_reason-&#62;description(': 'void  | string',
-\ 'hw_api_reason-&#62;type(': 'void  | HW_API_Reason',
-\ 'hw_api-&#62;remove(': 'array parameter | bool',
-\ 'hw_api-&#62;replace(': 'array parameter | hw_api_object',
-\ 'hw_api-&#62;setcommittedversion(': 'array parameter | hw_api_object',
-\ 'hw_api-&#62;srcanchors(': 'array parameter | array',
-\ 'hw_api-&#62;srcsofdst(': 'array parameter | array',
-\ 'hw_api-&#62;unlock(': 'array parameter | bool',
-\ 'hw_api-&#62;user(': 'array parameter | hw_api_object',
-\ 'hw_api-&#62;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 &#38;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 &#38;array | mixed',
-\ 'krsort(': 'array &#38;array [, int sort_flags] | bool',
-\ 'ksort(': 'array &#38;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 &#38;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 &#38;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 &#38;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 &#38;referrals | bool',
-\ 'ldap_parse_result(': 'resource link, resource result, int &#38;errcode [, string &#38;matcheddn [, string &#38;errmsg [, array &#38;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 &#38;vars [, mixed &#38;...] | 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 &#38;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 &#38;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 &#38;msgtype, int maxsize, mixed &#38;message [, bool unserialize [, int flags [, int &#38;errorcode]]] | bool',
-\ 'msg_remove_queue(': 'resource queue | bool',
-\ 'msg_send(': 'resource queue, int msgtype, mixed message [, bool serialize [, bool blocking [, int &#38;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 &#38;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 &#38;array | bool',
-\ 'natsort(': 'array &#38;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 &#38;r, int &#38;g, int &#38;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 &#38;y, int &#38;x | void',
-\ 'ncurses_getmouse(': 'array &#38;mevent | bool',
-\ 'ncurses_getyx(': 'resource window, int &#38;y, int &#38;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 &#38;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 &#38;oldmask | int',
-\ 'ncurses_mouse_trafo(': 'int &#38;y, int &#38;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 &#38;f, int &#38;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 &#38;y, int &#38;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 &#38;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 &#38;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 &#38;cols, int &#38;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 &#38;width, int &#38;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 &#38;actual_width, int &#38;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 &#38;items, string button1 [, string ...] | int',
-\ 'newt_win_menu(': 'string title, string text, int suggestedWidth, int flexDown, int flexUp, int maxListHeight, array items, int &#38;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 &#38;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 &#38;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 &#38;variable [, int type] | bool',
-\ 'oci_error(': '[resource source] | array',
-\ 'oci_execute(': 'resource stmt [, int mode] | bool',
-\ 'oci_fetch_all(': 'resource statement, array &#38;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 &#38;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 &#38;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 &#38;out [, bool notext] | bool',
-\ 'openssl_csr_export_to_file(': 'resource csr, string outfilename [, bool notext] | bool',
-\ 'openssl_csr_new(': 'array dn, resource &#38;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 &#38;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 &#38;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 &#38;decrypted, mixed key [, int padding] | bool',
-\ 'openssl_private_encrypt(': 'string data, string &#38;crypted, mixed key [, int padding] | bool',
-\ 'openssl_public_decrypt(': 'string data, string &#38;decrypted, mixed key [, int padding] | bool',
-\ 'openssl_public_encrypt(': 'string data, string &#38;crypted, mixed key [, int padding] | bool',
-\ 'openssl_seal(': 'string data, string &#38;sealed_data, array &#38;env_keys, array pub_key_ids | int',
-\ 'openssl_sign(': 'string data, string &#38;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 &#38;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 &#38;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 &#38;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 &#38;errors [, int options]] | array',
-\ 'parsekit_compile_string(': 'string phpcode [, array &#38;errors [, int options]] | array',
-\ 'parsekit_func_arginfo(': 'mixed function | array',
-\ 'parse_str(': 'string str [, array &#38;arr] | void',
-\ 'parse_url(': 'string url | array',
-\ 'passthru(': 'string command [, int &#38;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 &#38;status [, int options] | int',
-\ 'pcntl_waitpid(': 'int pid, int &#38;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 &#38;errno [, string &#38;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 &#38;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 &#38;matches [, int flags [, int offset]] | int',
-\ 'preg_match(': 'string pattern, string subject [, array &#38;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 &#38;count]] | mixed',
-\ 'preg_replace(': 'mixed pattern, mixed replacement, mixed subject [, int limit [, int &#38;count]] | mixed',
-\ 'preg_split(': 'string pattern, string subject [, int limit [, int flags]] | array',
-\ 'prev(': 'array &#38;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 &#38;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 &#38;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 &#38;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 &#38;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 &#38;array | bool',
-\ 'similar_text(': 'string first, string second [, float &#38;percent] | int',
-\ 'SimpleXMLElement-&#62;asXML(': '[string filename] | mixed',
-\ 'simplexml_element-&#62;attributes(': '[string data] | SimpleXMLElement',
-\ 'simplexml_element-&#62;children(': '[string nsprefix] | SimpleXMLElement',
-\ 'SimpleXMLElement-&#62;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 &#38;fd | bool',
-\ 'socket_get_option(': 'resource socket, int level, int optname | mixed',
-\ 'socket_getpeername(': 'resource socket, string &#38;addr [, int &#38;port] | bool',
-\ 'socket_getsockname(': 'resource socket, string &#38;addr [, int &#38;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 &#38;buf, int len, int flags, string &#38;name [, int &#38;port] | int',
-\ 'socket_recv(': 'resource socket, string &#38;buf, int len, int flags | int',
-\ 'socket_select(': 'array &#38;read, array &#38;write, array &#38;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 &#38;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 &#38;error_msg] | bool',
-\ 'sqlite_factory(': 'string filename [, int mode [, string &#38;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 &#38;error_message]] | resource',
-\ 'sqlite_popen(': 'string filename [, int mode [, string &#38;error_message]] | resource',
-\ 'sqlite_prev(': 'resource result | bool',
-\ 'sqlite_query(': 'resource dbhandle, string query [, int result_type [, string &#38;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 &#38;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 &#38;...] | 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 &#38;read, array &#38;write, array &#38;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 &#38;peername]] | resource',
-\ 'stream_socket_client(': 'string remote_socket [, int &#38;errno [, string &#38;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 &#38;address]] | string',
-\ 'stream_socket_sendto(': 'resource socket, string data [, int flags [, string address]] | int',
-\ 'stream_socket_server(': 'string local_socket [, int &#38;errno [, string &#38;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 &#38;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 &#38;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-&#62;getheight(': 'void  | float',
-\ 'swfbitmap-&#62;getwidth(': 'void  | float',
-\ 'swfbitmap(': 'mixed file [, mixed alphafile] | SWFBitmap',
-\ 'swfbutton-&#62;addaction(': 'resource action, int flags | void',
-\ 'swfbutton-&#62;addshape(': 'resource shape, int flags | void',
-\ 'swfbutton(': 'void  | SWFButton',
-\ 'swfbutton-&#62;setaction(': 'resource action | void',
-\ 'swfbutton-&#62;setdown(': 'resource shape | void',
-\ 'swfbutton-&#62;sethit(': 'resource shape | void',
-\ 'swfbutton-&#62;setover(': 'resource shape | void',
-\ 'swfbutton-&#62;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-&#62;addcolor(': 'int red, int green, int blue [, int a] | void',
-\ 'swfdisplayitem-&#62;move(': 'int dx, int dy | void',
-\ 'swfdisplayitem-&#62;moveto(': 'int x, int y | void',
-\ 'swfdisplayitem-&#62;multcolor(': 'int red, int green, int blue [, int a] | void',
-\ 'swfdisplayitem-&#62;remove(': 'void  | void',
-\ 'swfdisplayitem-&#62;rotate(': 'float ddegrees | void',
-\ 'swfdisplayitem-&#62;rotateto(': 'float degrees | void',
-\ 'swfdisplayitem-&#62;scale(': 'int dx, int dy | void',
-\ 'swfdisplayitem-&#62;scaleto(': 'int x [, int y] | void',
-\ 'swfdisplayitem-&#62;setdepth(': 'float depth | void',
-\ 'swfdisplayitem-&#62;setname(': 'string name | void',
-\ 'swfdisplayitem-&#62;setratio(': 'float ratio | void',
-\ 'swfdisplayitem-&#62;skewx(': 'float ddegrees | void',
-\ 'swfdisplayitem-&#62;skewxto(': 'float degrees | void',
-\ 'swfdisplayitem-&#62;skewy(': 'float ddegrees | void',
-\ 'swfdisplayitem-&#62;skewyto(': 'float degrees | void',
-\ 'swf_endbutton(': 'void  | void',
-\ 'swf_enddoaction(': 'void  | void',
-\ 'swf_endshape(': 'void  | void',
-\ 'swf_endsymbol(': 'void  | void',
-\ 'swffill(': 'void  | SWFFill',
-\ 'swffill-&#62;moveto(': 'int x, int y | void',
-\ 'swffill-&#62;rotateto(': 'float degrees | void',
-\ 'swffill-&#62;scaleto(': 'int x [, int y] | void',
-\ 'swffill-&#62;skewxto(': 'float x | void',
-\ 'swffill-&#62;skewyto(': 'float y | void',
-\ 'swffont-&#62;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-&#62;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-&#62;getshape1(': 'void  | mixed',
-\ 'swfmorph-&#62;getshape2(': 'void  | mixed',
-\ 'swfmorph(': 'void  | SWFMorph',
-\ 'swfmovie-&#62;add(': 'resource instance | void',
-\ 'swfmovie(': 'void  | SWFMovie',
-\ 'swfmovie-&#62;nextframe(': 'void  | void',
-\ 'swfmovie-&#62;output(': '[int compression] | int',
-\ 'swfmovie-&#62;remove(': 'resource instance | void',
-\ 'swfmovie-&#62;save(': 'string filename [, int compression] | int',
-\ 'swfmovie-&#62;setbackground(': 'int red, int green, int blue | void',
-\ 'swfmovie-&#62;setdimension(': 'int width, int height | void',
-\ 'swfmovie-&#62;setframes(': 'string numberofframes | void',
-\ 'swfmovie-&#62;setrate(': 'int rate | void',
-\ 'swfmovie-&#62;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-&#62;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-&#62;drawcurve(': 'int controldx, int controldy, int anchordx, int anchordy [, int targetdx, int targetdy] | int',
-\ 'swfshape-&#62;drawcurveto(': 'int controlx, int controly, int anchorx, int anchory [, int targetx, int targety] | int',
-\ 'swfshape-&#62;drawline(': 'int dx, int dy | void',
-\ 'swfshape-&#62;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-&#62;movepen(': 'int dx, int dy | void',
-\ 'swfshape-&#62;movepento(': 'int x, int y | void',
-\ 'swf_shapemoveto(': 'float x, float y | void',
-\ 'swfshape-&#62;setleftfill(': 'swfgradient fill | void',
-\ 'swfshape-&#62;setline(': 'swfshape shape | void',
-\ 'swfshape-&#62;setrightfill(': 'swfgradient fill | void',
-\ 'swf_showframe(': 'void  | void',
-\ 'SWFSound(': 'string filename, int flags | SWFSound',
-\ 'swfsprite-&#62;add(': 'resource object | void',
-\ 'swfsprite(': 'void  | SWFSprite',
-\ 'swfsprite-&#62;nextframe(': 'void  | void',
-\ 'swfsprite-&#62;remove(': 'resource object | void',
-\ 'swfsprite-&#62;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-&#62;addstring(': 'string string | void',
-\ 'swftextfield-&#62;addstring(': 'string string | void',
-\ 'swftextfield-&#62;align(': 'int alignement | void',
-\ 'swftextfield(': '[int flags] | SWFTextField',
-\ 'swftextfield-&#62;setbounds(': 'int width, int height | void',
-\ 'swftextfield-&#62;setcolor(': 'int red, int green, int blue [, int a] | void',
-\ 'swftextfield-&#62;setfont(': 'string font | void',
-\ 'swftextfield-&#62;setheight(': 'int height | void',
-\ 'swftextfield-&#62;setindentation(': 'int width | void',
-\ 'swftextfield-&#62;setleftmargin(': 'int width | void',
-\ 'swftextfield-&#62;setlinespacing(': 'int height | void',
-\ 'swftextfield-&#62;setmargins(': 'int left, int right | void',
-\ 'swftextfield-&#62;setname(': 'string name | void',
-\ 'swftextfield-&#62;setrightmargin(': 'int width | void',
-\ 'swftext-&#62;getwidth(': 'string string | float',
-\ 'swftext(': 'void  | SWFText',
-\ 'swftext-&#62;moveto(': 'int x, int y | void',
-\ 'swftext-&#62;setcolor(': 'int red, int green, int blue [, int a] | void',
-\ 'swftext-&#62;setfont(': 'string font | void',
-\ 'swftext-&#62;setheight(': 'int height | void',
-\ 'swftext-&#62;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 &#38;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-&#62;get_attr(': 'int attrib_id | tidy_attr',
-\ 'tidy_node-&#62;get_nodes(': 'int node_id | array',
-\ 'tidyNode-&#62;hasChildren(': 'void  | bool',
-\ 'tidyNode-&#62;hasSiblings(': 'void  | bool',
-\ 'tidyNode-&#62;isAsp(': 'void  | bool',
-\ 'tidyNode-&#62;isComment(': 'void  | bool',
-\ 'tidyNode-&#62;isHtml(': 'void  | bool',
-\ 'tidyNode-&#62;isJste(': 'void  | bool',
-\ 'tidyNode-&#62;isPhp(': 'void  | bool',
-\ 'tidyNode-&#62;isText(': 'void  | bool',
-\ 'tidy_node-&#62;next(': 'void  | tidy_node',
-\ 'tidy_node-&#62;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 &#38;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 &#38;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 &#38;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 &#38;error] | mixed',
-\ 'xdiff_string_patch_binary(': 'string str, string patch | string',
-\ 'xdiff_string_patch(': 'string str, string patch [, int flags [, string &#38;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 &#38;values [, array &#38;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 &#38;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 &#38;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 &#38;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 &#38;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 &#38;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 &#38;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 &#38;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'
-\ }
-" }}}
-" 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 &#38;param [, int type] | bool',
-\ 'PDOStatement::bindParam(': 'mixed parameter, mixed &#38;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'
-\ }
-			" }}}
+" 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
--- a/runtime/colors/delek.vim
+++ b/runtime/colors/delek.vim
@@ -1,10 +1,10 @@
 " Vim color file
-" Maintainer:	David Schweikert <dws@ee.ethz.ch>
-" Last Change:	2006 Apr 30
+" Maintainer:	David Schweikert <david@schweikert.ch>
+" Last Change:	2014 Mar 19
 
 hi clear
 
-let colors_name = "delek"
+let g:colors_name = "delek"
 
 " Normal should come first
 hi Normal     guifg=Black  guibg=White
@@ -28,7 +28,11 @@ hi NonText    ctermfg=Blue	   gui=bold g
 hi Pmenu      guibg=LightBlue
 hi PmenuSel   ctermfg=White	   ctermbg=DarkBlue  guifg=White  guibg=DarkBlue
 hi Question   ctermfg=DarkGreen    gui=bold guifg=SeaGreen
-hi Search     ctermfg=NONE	   ctermbg=Yellow guibg=Yellow guifg=NONE
+if &background == "light"
+    hi Search     ctermfg=NONE	   ctermbg=Yellow guibg=Yellow guifg=NONE
+else
+    hi Search     ctermfg=Black	   ctermbg=Yellow guibg=Yellow guifg=Black
+endif
 hi SpecialKey ctermfg=DarkBlue	   guifg=Blue
 hi StatusLine cterm=bold	   ctermbg=blue ctermfg=yellow guibg=gold guifg=blue
 hi StatusLineNC	cterm=bold	   ctermbg=blue ctermfg=black  guibg=gold guifg=blue
new file mode 100644
--- /dev/null
+++ b/runtime/colors/industry.vim
@@ -0,0 +1,40 @@
+" Vim color file
+" Maintainer:	Shian Lee 
+" Last Change:	2014 Mar 6 (for vim 7.4)
+" Remark:	"industry" stands for 'industrial' color scheme. In industrial
+"		HMI (Human-Machine-Interface) programming, using a standard color
+"               scheme is mandatory in many cases (in traffic-lights for example): 
+"               LIGHT_RED is	    'Warning' 
+"               LIGHT_YELLOW is	    'Attention' 
+"               LIGHT_GREEN is	    'Normal' 
+"               LIGHT_MAGENTA is    'Warning-Attention' (light RED-YELLOW)
+"               LIGHT_CYAN is	    'Attention-Normal'  (light YELLOW-GREEN).
+"               BLACK is	    Dark-High-Contrast Background for maximum safety.
+"               BLUE is		    Shade of BLACK (not supposed to get attention).
+"
+"               Industrial color scheme is by nature clear, safe and productive. 
+"               Yet, depends on the file type's syntax, it might appear incorrect. 
+
+" Reset to dark background, then reset everything to defaults:
+set background=dark
+highlight clear
+if exists("syntax_on")
+    syntax reset
+endif
+
+let colors_name = "industry"
+
+" First set Normal to regular white on black text colors:
+hi Normal ctermfg=LightGray ctermbg=Black guifg=#dddddd	guibg=Black
+
+" Syntax highlighting (other color-groups using default, see :help group-name):
+hi Comment    cterm=NONE ctermfg=DarkCyan    	gui=NONE guifg=#00aaaa   	 
+hi Constant   cterm=NONE ctermfg=LightCyan   	gui=NONE guifg=#00ffff   	
+hi Identifier cterm=NONE ctermfg=LightMagenta   gui=NONE guifg=#ff00ff   
+hi Function   cterm=NONE ctermfg=LightGreen   	gui=NONE guifg=#00ff00   	
+hi Statement  cterm=NONE ctermfg=White	     	gui=bold guifg=#ffffff	     	
+hi PreProc    cterm=NONE ctermfg=Yellow		gui=NONE guifg=#ffff00 	
+hi Type	      cterm=NONE ctermfg=LightGreen	gui=bold guifg=#00ff00 		
+hi Special    cterm=NONE ctermfg=LightRed    	gui=NONE guifg=#ff0000    	
+hi Delimiter  cterm=NONE ctermfg=Yellow    	gui=NONE guifg=#ffff00    	
+
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 7.4.  Last change: 2014 Feb 11
+*eval.txt*	For Vim version 7.4.  Last change: 2014 Mar 22
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -2815,7 +2815,7 @@ expand({expr} [, {nosuf} [, {list}]])			
 			<afile>		autocmd file name
 			<abuf>		autocmd buffer number (as a String!)
 			<amatch>	autocmd matched name
-			<sfile>		sourced script file name
+			<sfile>		sourced script file or function name
 			<slnum>		sourced script file line number
 			<cword>		word under the cursor
 			<cWORD>		WORD under the cursor
@@ -6624,7 +6624,8 @@ See |:verbose-cmd| for more information.
 :fu[nction][!] {name}([arguments]) [range] [abort] [dict]
 			Define a new function by the name {name}.  The name
 			must be made of alphanumeric characters and '_', and
-			must start with a capital or "s:" (see above).
+			must start with a capital or "s:" (see above).  When
+			using a capital "g:" be prepended.
 
 			{name} can also be a |Dictionary| entry that is a
 			|Funcref|: >
@@ -7463,10 +7464,11 @@ 7. Commands						*expression-commands*
 		:execute "!ls " . shellescape(filename, 1)
 <
 			Note: The executed string may be any command-line, but
-			you cannot start or end a "while", "for" or "if"
-			command.  Thus this is illegal: >
+			you cannot start or end a "while" or "for" command.
+			Thus this is illegal: >
 		:execute 'while i > 5'
 		:execute 'echo "test" | break'
+		:endwhile
 <
 			It is allowed to have a "while" or "if" command
 			completely in the executed string: >
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -1,4 +1,4 @@
-*index.txt*     For Vim version 7.4.  Last change: 2013 Nov 14
+*index.txt*     For Vim version 7.4.  Last change: 2014 Mar 22
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1124,8 +1124,8 @@ tag	      command	      action ~
 |:cNfile|	:cNf[ile]	go to last error in previous file
 |:cabbrev|	:ca[bbrev]	like ":abbreviate" but for Command-line mode
 |:cabclear|	:cabc[lear]	clear all abbreviations for Command-line mode
-|:caddbuffer|	:caddb[uffer]	add errors from buffer
-|:caddexpr|	:cad[dexpr]	add errors from expr
+|:caddbuffer|	:cad[dbuffer]	add errors from buffer
+|:caddexpr|	:cadde[xpr]	add errors from expr
 |:caddfile|	:caddf[ile]	add error message to current quickfix list
 |:call|		:cal[l]		call a function
 |:catch|	:cat[ch]	part of a :try command
--- a/runtime/doc/os_vms.txt
+++ b/runtime/doc/os_vms.txt
@@ -1,4 +1,4 @@
-*os_vms.txt*    For Vim version 7.4.  Last change: 2013 Aug 22
+*os_vms.txt*    For Vim version 7.4.  Last change: 2014 Feb 24
 
 
 		  VIM REFERENCE MANUAL
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1,4 +1,4 @@
-*pi_netrw.txt*  For Vim version 7.4.  Last change: 2014 Jan 21
+*pi_netrw.txt*  For Vim version 7.4.  Last change: 2014 Mar 20
 
 	    ------------------------------------------------
 	    NETRW REFERENCE MANUAL    by Charles E. Campbell
@@ -49,6 +49,7 @@ 9.  Browsing............................
       Quick Reference: Commands...........................|netrw-browse-cmds|
       Bookmarking A Directory.............................|netrw-mb|
       Browsing............................................|netrw-cr|
+        Squeezing the Current Tree-Listing Directory......|:netrw-s-cr|
       Browsing With A Horizontally Split Window...........|netrw-o|
       Browsing With A New Tab.............................|netrw-t|
       Browsing With A Vertically Split Window.............|netrw-v|
@@ -1179,6 +1180,12 @@ are introduced into a directory), the li
 always refresh directory listing buffers by pressing ctrl-L (see
 |netrw-ctrl-l|).
 
+								*:netrw-s-cr*
+    Squeezing the Current Tree-Listing Directory~
+    When the tree listing style is enabled (see |netrw-i|) and one is using
+    gvim, then the <s-cr> mapping may be used to squeeze (close) the
+    directory currently containing the cursor.
+
 
 Related topics: |netrw-o| |netrw-p| |netrw-P| |netrw-t| |netrw-v|
 Associated setting variables: |g:netrw_browse_split|      |g:netrw_fastbrowse|
@@ -1482,7 +1489,7 @@ DIRECTORY EXPLORATION COMMANDS  {{{2
 
      :[N]Explore[!]  [dir]... Explore directory of current file      *:Explore*
      :[N]Hexplore[!] [dir]... Horizontal Split & Explore             *:Hexplore*
-     :Rexplore            ... Return to Explorer                     *:Rexplore*
+     :Rexplore            ... Return to/from Explorer                *:Rexplore*
      :[N]Sexplore[!] [dir]... Split&Explore current file's directory *:Sexplore*
      :Texplore       [dir]... Tab              & Explore             *:Texplore*
      :[N]Vexplore[!] [dir]... Vertical   Split & Explore             *:Vexplore*
@@ -1492,23 +1499,36 @@ DIRECTORY EXPLORATION COMMANDS  {{{2
      :Nexplore............. go to next matching file                *:Nexplore*
      :Pexplore............. go to previous matching file            *:Pexplore*
 
+						*netrw-:Explore*
 :Explore  will open the local-directory browser on the current file's
           directory (or on directory [dir] if specified).  The window will be
 	  split only if the file has been modified, otherwise the browsing
 	  window will take over that window.  Normally the splitting is taken
 	  horizontally.
+	  Also see: |netrw-:Rexplore|
 :Explore! is like :Explore, but will use vertical splitting.
+						*netrw-:Lexplore*
 :Lexplore [dir] toggles an Explorer window on the left hand side
           of the current tab  It will open a netrw window on the current
-	  directory if [dir] is omitted.
+	  directory if [dir] is omitted; a :Lexplore [dir] will show
+	  the specified directory in the left-hand side browser display
+	  no matter from which window the command is issued.  By default,
+	  :Lexplore will change an uninitialized |g:netrw_chgwin| to 2;
+	  edits will thus be preferentially made in window#2.
+	  Also see: |netrw-C|| |g:netrw_chgwin| |g:netrw_winsize|
+	  	    |netrw-p| |netrw-P|| |g:netrw_browse_split|
+						*netrw-:Sexplore*
 :Sexplore will always split the window before invoking the local-directory
           browser.  As with Explore, the splitting is normally done
 	  horizontally.
 :Sexplore! [dir] is like :Sexplore, but the splitting will be done vertically.
+						*netrw-:Hexplore*
 :Hexplore  [dir] does an :Explore with |:belowright| horizontal splitting.
 :Hexplore! [dir] does an :Explore with |:aboveleft|  horizontal splitting.
+						*netrw-:Vexplore*
 :Vexplore  [dir] does an :Explore with |:leftabove|  vertical splitting.
 :Vexplore! [dir] does an :Explore with |:rightbelow| vertical splitting.
+						*netrw-:Texplore*
 :Texplore  [dir] does a |:tabnew| before generating the browser window
 
 By default, these commands use the current file's directory.  However, one may
@@ -1521,12 +1541,22 @@ Otherwise, the |g:netrw_winsize| variabl
 user, is used to control the quantity of rows and/or columns new explorer
 windows should have.
 
-:Rexplore  This command is a little different from the others.  When one
-           edits a file, for example by pressing <cr> when atop a file in
-	   a netrw browser window, :Rexplore will return the display to
-	   that of the last netrw browser window.  It is a command version
-	   of the <2-leftmouse> map (which is only available under gvim and
-	   cooperative terms).
+						*netrw-:Rexplore*
+:Rexplore  This command is a little different from the others as it doesn't
+	   necessarily open an Explorer window.
+
+	   Return to Explorer~
+	   When one edits a file, for example by pressing <cr> when the
+	   cursor is atop a file in a netrw browser window, :Rexplore will
+	   return the display to that of the last netrw browser window.
+
+	   Return from Explorer~
+	   Conversely, when one is editing a directory, issuing a :Rexplore
+	   will return to editing the last file being edited in that
+	   window.
+
+	   The <2-leftmouse> map (which is only available under gvim and
+	   cooperative terms) does the same as :Rexplore.
 
 Also see: |g:netrw_alto| |g:netrw_altv| |g:netrw_winsize|
 
@@ -1572,11 +1602,12 @@ As an example, consider
 The status line will show, on the right hand side of the status line, a
 message like "Match 3 of 20".
 
-Associated setting variables: |g:netrw_keepdir|      |g:netrw_browse_split|
-                              |g:netrw_fastbrowse|   |g:netrw_ftp_browse_reject|
-			      |g:netrw_ftp_list_cmd| |g:netrw_ftp_sizelist_cmd|
-			      |g:netrw_ftp_timelist_cmd| |g:netrw_list_cmd|
-			      |g:netrw_liststyle|
+Associated setting variables:
+	|g:netrw_keepdir|          |g:netrw_browse_split|
+	|g:netrw_fastbrowse|       |g:netrw_ftp_browse_reject|
+	|g:netrw_ftp_list_cmd|     |g:netrw_ftp_sizelist_cmd|
+	|g:netrw_ftp_timelist_cmd| |g:netrw_list_cmd|
+	|g:netrw_liststyle|
 
 
 DISPLAYING INFORMATION ABOUT FILE				*netrw-qf* {{{2
@@ -1666,10 +1697,10 @@ entry in the listing.
 
 Netrw will use the command in |g:netrw_list_cmd| to perform the directory
 listing operation after changing HOSTNAME to the host specified by the
-user-provided url.  By default netrw provides the command as:
+user-prpvided url.  By default netrw provides the command as: >
 
 	ssh HOSTNAME ls -FLa
-
+<
 where the HOSTNAME becomes the [user@]hostname as requested by the attempt to
 read.  Naturally, the user may override this command with whatever is
 preferred.  The NetList function which implements remote browsing
@@ -1882,12 +1913,27 @@ directory.
 
 Associated setting variable: |g:netrw_keepdir|
 
-MARKING FILES							*netrw-mf* {{{2
+MARKING FILES					*netrw-:MF*	*netrw-mf* {{{2
 	(also see |netrw-mr|)
 
-One may mark files with the cursor atop a filename and then pressing "mf".
-With gvim, one may also mark files with <s-leftmouse>.  The following netrw
-maps make use of marked files:
+Netrw has several ways of marking files:
+
+	* One may mark files with the cursor atop a filename and
+	then pressing "mf".
+
+	* With gvim, in addition one may mark files with
+	<s-leftmouse>.
+
+	* One may use the :MF command, which takes a list of
+	files (for local directories, the list may include
+	wildcards -- see |glob()|) >
+
+		:MF *.c
+<
+	* Note that :MF uses |<f-args>| to break the line
+	at spaces.
+
+The following netrw maps make use of marked files:
 
     |netrw-a|	Hide marked files/directories
     |netrw-D|	Delete marked files/directories
@@ -1896,7 +1942,7 @@ maps make use of marked files:
     |netrw-me|	Edit marked files
     |netrw-mF|	Unmark marked files
     |netrw-mg|	Apply vimgrep to marked files
-    |netrw-mm|	Move marked files
+    |netrw-mm|	Move marked files to target
     |netrw-mp|	Print marked files
     |netrw-mt|	Set target for |netrw-mm| and |netrw-mc|
     |netrw-mT|	Generate tags using marked files
@@ -1933,6 +1979,12 @@ means that each directory has its own lo
 commands which operate on marked files use one or the other of the marked file
 lists.
 
+Known Problem: if one is using tree mode (|g:netrw_liststyle|) and several
+directories have files with the same name,  then marking such a file will
+result in all such files being highlighted as if they were all marked.  The
+|markfilelist|, however, will only have the selected file in it.  This problem
+is unlikely to be fixed.
+
 
 UNMARKING FILES							*netrw-mF* {{{2
 	(also see |netrw-mf|)
@@ -2090,6 +2142,10 @@ Set the marked file copy/move-to target 
   * However, if the cursor is atop a directory name, then that directory is
     used for the copy/move-to target
 
+  * One may use the :MT [directory] command to set the target	*netrw-:MT*
+    This command uses |<q-args>|, so spaces in the directory name are
+    permitted without escaping.
+
 There is only one copy/move-to target per vim session; ie. the target is a
 script variable (see |s:var|) and is shared between all netrw windows (in an
 instance of vim).
@@ -2120,9 +2176,9 @@ http://www.drchip.org/astronaut/src/inde
 in my <.vimrc>.
 
 When a remote set of files are tagged, the resulting tags file is "obtained";
-ie. a copy is transferred to the local system's directory.  The local tags
+ie. a copy is transferred to the local system's directory.  The now local tags
 file is then modified so that one may use it through the network.  The
-modification is concerns the names of the files in the tags; each filename is
+modification made concerns the names of the files in the tags; each filename is
 preceded by the netrw-compatible url used to obtain it.  When one subsequently
 uses one of the go to tag actions (|tags|), the url will be used by netrw to
 edit the desired file and go to the tag.
@@ -2131,34 +2187,38 @@ Associated setting variables: |g:netrw_c
 
 MARKED FILES: TARGET DIRECTORY USING BOOKMARKS  		*netrw-Tb* {{{2
 
-Sets the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|).
+Sets the marked file copy/move-to target.
 
 The |netrw-qb| map will give you a list of bookmarks (and history).
 One may choose one of the bookmarks to become your marked file
 target by using [count]Tb (default count: 1).
 
 Related topics:
+      Copying files to target............................|netrw-mc|
       Listing Bookmarks and History......................|netrw-qb|
       Marked Files: Setting The Target Directory.........|netrw-mt|
       Marked Files: Target Directory Using History.......|netrw-Th|
       Marking Files......................................|netrw-mf|
       Marking Files by Regular Expression................|netrw-mr|
+      Moving files to target.............................|netrw-mm|
 
 
 MARKED FILES: TARGET DIRECTORY USING HISTORY	  		*netrw-Th* {{{2
 
-Sets the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|).
+Sets the marked file copy/move-to target.
 
 The |netrw-qb| map will give you a list of history (and bookmarks).
 One may choose one of the history entries to become your marked file
 target by using [count]Th (default count: 0; ie. the current directory).
 
 Related topics:
+      Copying files to target............................|netrw-mc|
       Listing Bookmarks and History......................|netrw-qb|
       Marked Files: Setting The Target Directory.........|netrw-mt|
       Marked Files: Target Directory Using Bookmarks.....|netrw-Tb|
       Marking Files......................................|netrw-mf|
       Marking Files by Regular Expression................|netrw-mr|
+      Moving files to target.............................|netrw-mm|
 
 
 MARKED FILES: UNMARKING						*netrw-mu* {{{2
@@ -2282,6 +2342,7 @@ your browsing preferences.  (see also: |
   *g:netrw_dynamic_maxfilenamelen* =32: enables dynamic determination of
 				    |g:netrw_maxfilenamelen|, which affects
 				    local file long listing.
+
   *g:netrw_errorlvl*		=0: error levels greater than or equal to
 				    this are permitted to be displayed
 				    0: notes
@@ -2434,7 +2495,7 @@ your browsing preferences.  (see also: |
 				evaluation will be suppressed
 				(see |'ballooneval'|)
 
-  *g:netrw_remote_mkdir*	command for making a local directory
+  *g:netrw_remote_mkdir*	command for making a remote directory
 				via ftp  (also see |g:netrw_mkdir_cmd|)
 				 default: "mkdir"
 
@@ -2482,7 +2543,7 @@ your browsing preferences.  (see also: |
 
   *g:netrw_sort_sequence*	when sorting by name, first sort by the
 				comma-separated pattern sequence.  Note that
-				the filigree added to indicate filetypes
+				any filigree added to indicate filetypes
 				should be accounted for in your pattern.
 				 default: '[\/]$,*,\.bak$,\.o$,\.h$,
 				           \.info$,\.swp$,\.obj$'
@@ -2498,7 +2559,7 @@ your browsing preferences.  (see also: |
 					netrwMakefile: [mM]akefile *.mak
 					netrwObj     : *.o *.obj
 					netrwTags    : tags ANmenu ANtags
-					netrwTilde   : *~
+					netrwTilde   : *
 					netrwTmp     : tmp* *tmp
 
 				These syntax highlighting groups are linked
@@ -2507,8 +2568,27 @@ your browsing preferences.  (see also: |
 				one may put lines like >
 					hi link netrwCompress Visual
 <				into one's <.vimrc> to use one's own
-				preferences.
-
+				preferences.  Alternatively, one may
+				put such specifications into
+				.vim/after/syntax/netrw.vim.
+
+				As an example, I myself use a dark-background
+				colorscheme with the following in
+				.vim/after/syntax/netrw.vim: >
+
+ hi netrwCompress term=NONE cterm=NONE gui=NONE ctermfg=10 guifg=green  ctermbg=0 guibg=black
+ hi netrwData	  term=NONE cterm=NONE gui=NONE ctermfg=9 guifg=blue ctermbg=0 guibg=black
+ hi netrwHdr	  term=NONE cterm=NONE,italic gui=NONE guifg=SeaGreen1
+ hi netrwLex	  term=NONE cterm=NONE,italic gui=NONE guifg=SeaGreen1
+ hi netrwYacc	  term=NONE cterm=NONE,italic gui=NONE guifg=SeaGreen1
+ hi netrwLib	  term=NONE cterm=NONE gui=NONE ctermfg=14 guifg=yellow
+ hi netrwObj	  term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red
+ hi netrwTilde	  term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red
+ hi netrwTmp	  term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red
+ hi netrwTags	  term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red
+ hi netrwDoc	  term=NONE cterm=NONE gui=NONE ctermfg=220 ctermbg=27 guifg=yellow2 guibg=Blue3
+ hi netrwSymLink  term=NONE cterm=NONE gui=NONE ctermfg=220 ctermbg=27 guifg=grey60
+<
   *g:netrw_ssh_browse_reject*	ssh can sometimes produce unwanted lines,
 				messages, banners, and whatnot that one doesn't
 				want masquerading as "directories" and "files".
@@ -2543,6 +2623,7 @@ your browsing preferences.  (see also: |
 				ml_get errors, try putting
 				  let g:netrw_use_noswf= 0
 				in your .vimrc.
+				  default: 1
 
   *g:netrw_winsize*		specify initial size of new windows made with
 				"o" (see |netrw-o|), "v" (see |netrw-v|),
@@ -2582,7 +2663,7 @@ Netrw has been designed to handle user o
 options to something that's compatible with netrw's needs, and then restoring
 them.  However, the autochdir option: >
 	:set acd
-is problematical.  Autochdir sets the current directory to that containing the
+is problematic.  Autochdir sets the current directory to that containing the
 file you edit; this apparently also applies to directories.  In other words,
 autochdir sets the current directory to that containing the "file" (even if
 that "file" is itself a directory).
@@ -2633,9 +2714,9 @@ Related topics:
 							*netrw-createfile*
 OPEN A NEW FILE IN NETRW'S CURRENT DIRECTORY		*netrw-%*
 
-To open a file in netrw's current directory, press "%".  This map will
-query the user for a new filename; an empty file by that name will be
-placed in the netrw's current directory (ie. b:netrw_curdir).
+To open a new file in netrw's current directory, press "%".  This map
+will query the user for a new filename; an empty file by that name will
+be placed in the netrw's current directory (ie. b:netrw_curdir).
 
 Related topics:               |netrw-d|
 
@@ -2661,6 +2742,9 @@ These will:
 	   will use only 30% of the columns available; the rest of the window
 	   is used for the preview window.
 
+Also see: |g:netrw_chgwin| |netrw-P|
+
+
 PREVIOUS WINDOW				*netrw-P* *netrw-prvwin* {{{2
 
 To edit a file or directory in the previously used (last accessed) window (see
@@ -2680,6 +2764,8 @@ Associated setting variables:
    |g:netrw_preview| control horizontal vs vertical splitting
    |g:netrw_winsize| control initial sizing
 
+Also see: |g:netrw_chgwin| |netrw-p|
+
 
 REFRESHING THE LISTING			*netrw-ctrl-l* *netrw-ctrl_l* {{{2
 
@@ -2717,6 +2803,7 @@ If there are marked files:  (see |netrw-
     Note that moving files is a dangerous operation; copies are safer.  That's
     because a "move" for remote files is actually a copy + delete -- and if
     the copy fails and the delete does not, you may lose the file.
+    Use at your own risk.
 
 The g:netrw_rename_cmd variable is used to implement renaming.  By default its
 value is:
@@ -2830,7 +2917,7 @@ 10. Problems and Fixes					*netrw-proble
 
 		(taken from an answer provided by Wu Yongwei on the vim
 		mailing list)
-		I now see the problem. You code page is not 936, right? Vim
+		I now see the problem. Your code page is not 936, right? Vim
 		seems only able to open files with names that are valid in the
 		current code page, as are many other applications that do not
 		use the Unicode version of Windows APIs. This is an OS-related
@@ -3038,9 +3125,6 @@ The <netrw.vim> script is typically avai
 >
 	/usr/local/share/vim/vim7x/plugin/netrwPlugin.vim
 	/usr/local/share/vim/vim7x/autoload/netrw.vim
-< -or- >
-	/usr/local/share/vim/vim6x/plugin/netrwPlugin.vim
-	/usr/local/share/vim/vim6x/autoload/netrw.vim
 <
 which is loaded automatically at startup (assuming :set nocp).
 
@@ -3050,9 +3134,7 @@ which is loaded automatically at startup
 	   or
 	     http://vim.sourceforge.net/scripts/script.php?script_id=120
 
-	  It now comes as a "vimball"; if you're using vim 7.0 or earlier,
-	  you'll need to update vimball, too.  See
-	     http://www.drchip.org/astronaut/vim/index.html#VIMBALL
+	  Decho.vim is provided as a "vimball"; see |vimball-intro|.
 
 	2. Edit the <netrw.vim> file by typing: >
 
@@ -3082,24 +3164,73 @@ which is loaded automatically at startup
 		:w! DBG
 
 <	   Furthermore, it'd be helpful if you would type >
-		:Dsep
-<	   after each command you issue, thereby making it easier to
-	   associate which part of the debugging trace is due to which
-	   command.
-
-	   Please send that information to <netrw.vim>'s maintainer, >
+		:Dsep <command>
+<	   where <command> is the command you're about to type next,
+	   thereby making it easier to associate which part of the
+	   debugging trace is due to which command.
+
+	   Please send that information to <netrw.vim>'s maintainer along
+	   with the o/s you're using and vim version you're using
+	   (see |:version|) >
 		NdrOchip at ScampbellPfamily.AbizM - NOSPAM
 <
 ==============================================================================
 12. History						*netrw-history* {{{1
 
+	v151:	Jan 22, 2014	* extended :Rexplore to return to buffer
+				  prior to Explore or editing a directory
+				* (Ken Takata) netrw gave error when
+				  clipboard was disabled.  Sol'n: Placed
+				  several if has("clipboard") tests in.
+				* Fixed ftp://X@Y@Z// problem; X@Y now
+				  part of user id, and only Z is part of
+				  hostname.
+				* (A Loumiotis) reported that completion
+				  using a directory name containing spaces
+				  did not work.  Fixed with a retry in
+				  netrw#Explore() which removes the
+				  backslashes vim inserted.
+		Feb 26, 2014	* :Rexplore now records the current file
+				   using w:netrw_rexfile when returning via
+				  |:Rexplore|
+		Mar 08, 2014	* (David Kotchan) provided some patches
+				  allowing netrw to work properly with
+				  windows shares.
+				* Multiple one-liner help messages available
+				  by pressing <cr> while atop the "Quick
+				  Help" line
+				* worked on ShellCmdPost, FocusGained event
+				  handling.
+				* |:Lexplore| path: will be used to update
+				  a left-side netrw browsing directory.
+		Mar 12, 2014	* |:netrw-s-cr|: use <s-cr>  to close
+				  tree directory implemented
+		Mar 13, 2014	* (Tony Mechylynck) reported that using
+				  the browser with ftp on a directory,
+				  and selecting a gzipped txt file, that
+				  an E19 occurred (which was issued by
+				  gzip.vim).  Fixed.
+		Mar 14, 2014	* Implemented :MF and :MT (see |netrw-:MF|
+				  and |netrw-:MT|, respectively)
+		Mar 17, 2014	* |:Ntree| [dir] wasn't working properly; fixed
+		Mar 18, 2014	* Changed all uses of set to setl
+		Mar 18, 2014	* Commented the netrw_btkeep line in
+				  s:NetrwOptionSave(); the effect is that
+				  netrw buffers will remain as |'bt'|=nofile.
+				  This should prevent swapfiles being created
+				  for netrw buffers.
+		Mar 20, 2014	* Changed all uses of lcd to use s:NetrwLcd()
+				  instead.  Consistent error handling results
+				  and it also handles Window's shares
+				* Fixed |netrw-d| command when applied with ftp
+				* https: support included for netrw#NetRead()
 	v150:	Jul 12, 2013	* removed a "keepalt" to allow ":e #" to
 				  return to the netrw directory listing
 		Jul 13, 2013	* (Jonas Diemer) suggested changing
 				  a <cWORD> to <cfile>.
 		Jul 21, 2013	* (Yuri Kanivetsky) reported that netrw's
 				  use of mkdir did not produce directories
-				  following umask.
+				  following the user's umask.
 		Aug 27, 2013	* introduced |g:netrw_altfile| option
 		Sep 05, 2013	* s:Strlen() now uses |strdisplaywidth()|
 				  when available, by default
--- a/runtime/doc/quickfix.txt
+++ b/runtime/doc/quickfix.txt
@@ -1,4 +1,4 @@
-*quickfix.txt*  For Vim version 7.4.  Last change: 2013 Aug 03
+*quickfix.txt*  For Vim version 7.4.  Last change: 2014 Mar 22
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -202,7 +202,7 @@ command with 'l'.
 			the current window is used instead of the quickfix
 			list.
 
-							*:caddb* *:caddbuffer*
+							*:cad* *:caddbuffer*
 :caddb[uffer] [bufnr]	Read the error list from the current buffer and add
 			the errors to the current quickfix list.  If a
 			quickfix list is not present, then a new list is
@@ -240,7 +240,7 @@ command with 'l'.
 :lgete[xpr] {expr}	Same as |:cgetexpr|, except the location list for the
 			current window is used instead of the quickfix list.
 
-							*:cad* *:caddexpr*
+							*:cadde* *:caddexpr*
 :cad[dexpr] {expr}	Evaluate {expr} and add the resulting lines to the
 			current quickfix list. If a quickfix list is not
 			present, then a new list is created. The current
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1973,8 +1973,8 @@ 90.5	usr_90.txt	/*90.5*
 :cabc	map.txt	/*:cabc*
 :cabclear	map.txt	/*:cabclear*
 :cad	quickfix.txt	/*:cad*
-:caddb	quickfix.txt	/*:caddb*
 :caddbuffer	quickfix.txt	/*:caddbuffer*
+:cadde	quickfix.txt	/*:cadde*
 :caddexpr	quickfix.txt	/*:caddexpr*
 :caddf	quickfix.txt	/*:caddf*
 :caddfile	quickfix.txt	/*:caddfile*
@@ -2500,6 +2500,7 @@ 90.5	usr_90.txt	/*90.5*
 :nbkey	netbeans.txt	/*:nbkey*
 :nbstart	netbeans.txt	/*:nbstart*
 :ne	editing.txt	/*:ne*
+:netrw-s-cr	pi_netrw.txt	/*:netrw-s-cr*
 :new	windows.txt	/*:new*
 :next	editing.txt	/*:next*
 :next_f	editing.txt	/*:next_f*
@@ -6942,6 +6943,15 @@ netreadfixup	pi_netrw.txt	/*netreadfixup
 netrw	pi_netrw.txt	/*netrw*
 netrw-%	pi_netrw.txt	/*netrw-%*
 netrw--	pi_netrw.txt	/*netrw--*
+netrw-:Explore	pi_netrw.txt	/*netrw-:Explore*
+netrw-:Hexplore	pi_netrw.txt	/*netrw-:Hexplore*
+netrw-:Lexplore	pi_netrw.txt	/*netrw-:Lexplore*
+netrw-:MF	pi_netrw.txt	/*netrw-:MF*
+netrw-:MT	pi_netrw.txt	/*netrw-:MT*
+netrw-:Rexplore	pi_netrw.txt	/*netrw-:Rexplore*
+netrw-:Sexplore	pi_netrw.txt	/*netrw-:Sexplore*
+netrw-:Texplore	pi_netrw.txt	/*netrw-:Texplore*
+netrw-:Vexplore	pi_netrw.txt	/*netrw-:Vexplore*
 netrw-C	pi_netrw.txt	/*netrw-C*
 netrw-D	pi_netrw.txt	/*netrw-D*
 netrw-O	pi_netrw.txt	/*netrw-O*
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.4.  Last change: 2014 Mar 08
+*todo.txt*      For Vim version 7.4.  Last change: 2014 Mar 22
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -54,55 +54,38 @@ Regexp problems:
 Problem that a previous silent ":throw" causes a following try/catch not to
 work. (ZyX, 2013 Sep 28)
 
-Patch for VMS. (Zoltan Arpadffy, 2014 Mar 6)
-
-Euphoria syntax, Shian Lee, Feb 27
-
 ":cd C:\Windows\System32\drivers\etc*" does not work, even though the
 directory exists. (Sergio Gallelli, 2013 Dec 29)
 
+It is possible to define a function with a colon in the name.
+"g:" is not recognized as it should.  (zyx, 2014 Mar 16)
+Do some plugins use names with a colon?  Disallow it, but ignore the error
+when an option is set?
+
+":lunmap" cannot be abbrevated to ":lu". (ZyX)
+
 Problem using ":try" inside ":execute". (ZyX, 2013 Sep 15)
 
-Can't build Vim with Perl when -Dusethreads is not specified for building
-perl, and building with --enable-perlinterp=dynamic.
-Patch by Yasuhiro Matsumoto, 2014 Feb 24.
-
 Update for Clojure ftplugin. (Sung Pae).  Await discussion about formatting in
 ftplugins.
 
-Update for phpcomplete.vim. (Complex, 2014 Mar 1)
-
 Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
 
+Patch to add :noswapfile modifier. (Christian Brabandt, 2014 Mar 13)
+
+Patch to make ":sp {current-buffer-name}" not reload the buffer.
+(Christian Brabandt, 2013 Mar 13)
+
+Patch for quickfix window resizing.  Issue 199.  (Christian Brabandt)
+
 Using autoconf 2.69 gives a lot of warnings.
 
-Patch to allow for negative index in string. (LCD, 2014 Feb 13)
-Feb 14 with test. Or does this intentionally not work?
-
-Issue 197: ]P doesn't paste over Visual selection.  With patch from Christian
-Brabandt, Feb 6.  Issue 197.
-
-Make 'lispwords' global-local. (Sung Pae, 2014 Feb 16)
-
 Problem with 'spellsuggest' file, only works for some words.
 (Cesar Romani, 2013 Aug 20)  Depends on file name? (Aug 24)
 Additional remark by glts: the suggested words are marked bad?
 
-8   non-ASCII font names don't work.  Need to convert from 'encoding' and use
-    the wide functions. Patch by Ken Takata, 2013 Dec 22.
-    Update 2014 Jan 6.
-
 Syntax highlighting slow (hangs) in SASS file. (Niek Bosch, 2013 Aug 21)
 
-Problem with 'errorformat'.  Patch by Lcd, 2014 Feb 21. With test.
-
-Patch for the problem that a mapping where the second byte is 0x80 isn't
-handled correcly. (Nobuhiro Takasaki, 2014 Feb 11)
-Update 2014 Mar 8.
-
-Patch for mksession. (Nobuhiro Takasaki, 2014 Jan 31)
-Also fixes another problem (following email)
-
 Patch to use rubyarchhdrdir for Ruby 2.x. (James McCoy, 2014 Feb 24)
 
 Dynamic Ruby linking issues.  Patch by Danek Duvall (2014 Feb 26)
@@ -128,6 +111,10 @@ Patch by Gary Johnson, 2014 Mar 6.
 
 Issue 174: Detect Mason files.
 
+No error for missing endwhile. (ZyX, 2014 Mar 20)
+
+Patch to add v:progpath. (Viktor Kojouharov, 2014 Mar 15)
+
 Phpcomplete.vim update. (Complex, 2014 Jan 15)
 
 PHP syntax is extremely slow. (Anhad Jai Singh, 2014 Jan 19)
@@ -135,6 +122,11 @@ PHP syntax is extremely slow. (Anhad Jai
 Can we make ":unlet $VAR" use unsetenv() to delete the env var?
 What for systems that don't have unsetenv()?
 
+This does not give an error: (Andre Sihera, 2014 Mar 21)
+    vim -u NONE 1 2 3 -c 'bufdo if 1 | echo 1'
+This neither: (ZyX)
+    vim -u NONE 1 2 3 -c 'bufdo while 1 | echo 1'
+
 spec ftplugin: patch from Igor Gnatenko, 2014 Jan 26.
 Include if maintainers don't respond.
 
@@ -165,6 +157,9 @@ Patch to make test 100 work on MS-Window
 
 Patch to define macros for hardcoded values. (Elias Diem, 2013 Dec 14)
 
+Patch to add sortuniq(). (Cade Forester, 2014 Mar 19)
+Or add uniq() instead?
+
 Perl: support for Activestate perl 5.18: Issue 170.
 
 Several syntax file match "^\s*" which may get underlined if that's in the
@@ -175,6 +170,9 @@ Issue 28.
 
 Go through more coverity reports.
 
+Patch to add ":undorecover", get as much text out of the undo file as
+possible. (Christian Brabandt, 2014 Mar 12)
+
 Include Haiku port? (Adrien Destugues, Siarzhuk Zharski, 2013 Oct 24)
 
 Updated spec ftplugin. (Matěj Cepl, 2013 Oct 16)
@@ -190,7 +188,7 @@ With "$" in 'cpoptions' the popup menu i
 2013 Sep 5)
 
 Patch to add "ntab" item in 'listchars' to repeat first character. (Nathaniel
-Braun, pragm, 2013 Oct 13)  Again 2014 Mar 5.
+Braun, pragm, 2013 Oct 13)  A better solution 2014 Mar 5.
 
 Undo message is not always properly displayed.  Patch by Ken Takata, 2013 oct
 3.  Doesn't work properly according to Yukihiro Nakadaira.
@@ -2768,8 +2766,6 @@ Problems that will (probably) not be sol
     input method called from GDK code.  Without Perl it doesn't crash.
 -   VMS: Vimdiff doesn't work with the VMS diff, because the output looks
     different.  This makes test 47 fail.  Install a Unix-compatible diff.
--   VMS v7.1 and older: Tests 21 and 32 fail.  From VMS v7.1-2 and newer Vim
-    does not have this behavior. (Zoltan Arpadffy)
 -   Win32 GUI: mouse wheel always scrolls rightmost window.  The events arrive
     in Vim as if the rightmost scrollbar was used.
 -   GTK with Gnome: Produces an error message when starting up:
@@ -4234,8 +4230,7 @@ 8   When 'comments' has both "s1:/*,mb:*
 7   Use Tabs for the indent of starting lines, pad with spaces for
     continuation lines.  Allows changing 'tabstop' without messing up the
     indents.
-    'keeptabs': when set don't change the tabs and spaces used for indent,
-    when the indent remains the same or increases.
+    Patch by Lech Lorens, 2010 Mar.  Update by James McCoy, 2014 Mar 15.
 
 
 Java:
--- a/runtime/ftplugin/clojure.vim
+++ b/runtime/ftplugin/clojure.vim
@@ -5,7 +5,7 @@
 " Maintainer:	Sung Pae <self@sungpae.com>
 " URL:		https://github.com/guns/vim-clojure-static
 " License:	Same as Vim
-" Last Change:	08 September 2013
+" Last Change:	16 February 2014
 
 if exists("b:did_ftplugin")
 	finish
@@ -15,7 +15,7 @@ let b:did_ftplugin = 1
 let s:cpo_save = &cpo
 set cpo&vim
 
-let b:undo_ftplugin = 'setlocal iskeyword< define< formatoptions< comments< commentstring<'
+let b:undo_ftplugin = 'setlocal iskeyword< define< formatoptions< comments< commentstring< lispwords<'
 
 setlocal iskeyword+=?,-,*,!,+,/,=,<,>,.,:,$
 
@@ -31,6 +31,21 @@ setlocal formatoptions-=t formatoptions+
 setlocal comments=n:;
 setlocal commentstring=;\ %s
 
+" Specially indented symbols from clojure.core and clojure.test.
+"
+" Clojure symbols are indented in the defn style when they:
+"
+"   * Define vars and anonymous functions
+"   * Create new lexical scopes or scopes with altered environments
+"   * Create conditional branches from a predicate function or value
+"
+" The arglists for these functions are generally in the form of [x & body];
+" Functions that accept a flat list of forms do not treat the first argument
+" specially and hence are not indented specially.
+"
+" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-009/clj/src/vim_clojure_static/generate.clj
+setlocal lispwords=as->,binding,bound-fn,case,catch,cond->,cond->>,condp,def,definline,definterface,defmacro,defmethod,defmulti,defn,defn-,defonce,defprotocol,defrecord,defstruct,deftest,deftest-,deftype,doall,dorun,doseq,dotimes,doto,extend,extend-protocol,extend-type,fn,for,if,if-let,if-not,let,letfn,locking,loop,ns,proxy,reify,set-test,testing,when,when-first,when-let,when-not,while,with-bindings,with-in-str,with-local-vars,with-open,with-precision,with-redefs,with-redefs-fn,with-test
+
 " Provide insert mode completions for special forms and clojure.core. As
 " 'omnifunc' is set by popular Clojure REPL client plugins, we also set
 " 'completefunc' so that the user has some form of completion available when
--- a/runtime/ftplugin/j.vim
+++ b/runtime/ftplugin/j.vim
@@ -1,9 +1,10 @@
 " Vim filetype plugin
 " Language:	J
 " Maintainer:	David Bürgin <676c7473@gmail.com>
-" Last Change:	2013-10-06
+" URL:		https://github.com/glts/vim-j
+" Last Change:	2014-03-17
 
-if exists("b:did_ftplugin")
+if exists('b:did_ftplugin')
   finish
 endif
 let b:did_ftplugin = 1
@@ -15,4 +16,4 @@ setlocal formatoptions-=t
 setlocal shiftwidth=2 softtabstop=2 expandtab
 setlocal matchpairs=(:)
 
-let b:undo_ftplugin = "setl mps< et< sts< sw< fo< cms< com< isk<"
+let b:undo_ftplugin = 'setlocal matchpairs< expandtab< softtabstop< shiftwidth< formatoptions< commentstring< comments< iskeyword<'
--- a/runtime/indent/clojure.vim
+++ b/runtime/indent/clojure.vim
@@ -6,7 +6,7 @@
 " Maintainer:	Sung Pae <self@sungpae.com>
 " URL:		https://github.com/guns/vim-clojure-static
 " License:	Same as Vim
-" Last Change:	16 December 2013
+" Last Change:	16 February 2014
 
 " TODO: Indenting after multibyte characters is broken:
 "       (let [Δ (if foo
@@ -21,7 +21,7 @@ let b:did_indent = 1
 let s:save_cpo = &cpo
 set cpo&vim
 
-let b:undo_indent = 'setlocal autoindent< smartindent< lispwords< expandtab< softtabstop< shiftwidth< indentexpr< indentkeys<'
+let b:undo_indent = 'setlocal autoindent< smartindent< expandtab< softtabstop< shiftwidth< indentexpr< indentkeys<'
 
 setlocal noautoindent nosmartindent
 setlocal softtabstop=2 shiftwidth=2 expandtab
@@ -307,85 +307,6 @@ else
 
 endif
 
-" Specially indented symbols from clojure.core and clojure.test.
-"
-" Clojure symbols are indented in the defn style when they:
-"
-"   * Define vars and anonymous functions
-"   * Create new lexical scopes or scopes with altered environments
-"   * Create conditional branches from a predicate function or value
-"
-" The arglists for these functions are generally in the form of [x & body];
-" Functions that accept a flat list of forms do not treat the first argument
-" specially and hence are not indented specially.
-
-" Definitions
-setlocal lispwords=
-setlocal lispwords+=bound-fn
-setlocal lispwords+=def
-setlocal lispwords+=definline
-setlocal lispwords+=definterface
-setlocal lispwords+=defmacro
-setlocal lispwords+=defmethod
-setlocal lispwords+=defmulti
-setlocal lispwords+=defn
-setlocal lispwords+=defn-
-setlocal lispwords+=defonce
-setlocal lispwords+=defprotocol
-setlocal lispwords+=defrecord
-setlocal lispwords+=defstruct
-setlocal lispwords+=deftest " clojure.test
-setlocal lispwords+=deftest- " clojure.test
-setlocal lispwords+=deftype
-setlocal lispwords+=extend
-setlocal lispwords+=extend-protocol
-setlocal lispwords+=extend-type
-setlocal lispwords+=fn
-setlocal lispwords+=ns
-setlocal lispwords+=proxy
-setlocal lispwords+=reify
-setlocal lispwords+=set-test " clojure.test
-
-" Binding forms
-setlocal lispwords+=as->
-setlocal lispwords+=binding
-setlocal lispwords+=doall
-setlocal lispwords+=dorun
-setlocal lispwords+=doseq
-setlocal lispwords+=dotimes
-setlocal lispwords+=doto
-setlocal lispwords+=for
-setlocal lispwords+=if-let
-setlocal lispwords+=let
-setlocal lispwords+=letfn
-setlocal lispwords+=locking
-setlocal lispwords+=loop
-setlocal lispwords+=testing " clojure.test
-setlocal lispwords+=when-first
-setlocal lispwords+=when-let
-setlocal lispwords+=with-bindings
-setlocal lispwords+=with-in-str
-setlocal lispwords+=with-local-vars
-setlocal lispwords+=with-open
-setlocal lispwords+=with-precision
-setlocal lispwords+=with-redefs
-setlocal lispwords+=with-redefs-fn
-setlocal lispwords+=with-test " clojure.test
-
-" Conditional branching
-setlocal lispwords+=case
-setlocal lispwords+=cond->
-setlocal lispwords+=cond->>
-setlocal lispwords+=condp
-setlocal lispwords+=if
-setlocal lispwords+=if-not
-setlocal lispwords+=when
-setlocal lispwords+=when-not
-setlocal lispwords+=while
-
-" Exception handling
-setlocal lispwords+=catch
-
 let &cpo = s:save_cpo
 unlet! s:save_cpo
 
--- a/runtime/indent/j.vim
+++ b/runtime/indent/j.vim
@@ -1,9 +1,10 @@
 " Vim indent file
 " Language:	J
 " Maintainer:	David Bürgin <676c7473@gmail.com>
-" Last Change:	2013-09-21
+" URL:		https://github.com/glts/vim-j
+" Last Change:	2014-03-17
 
-if exists("b:did_indent")
+if exists('b:did_indent')
   finish
 endif
 let b:did_indent = 1
@@ -12,9 +13,9 @@ setlocal indentexpr=GetJIndent()
 setlocal indentkeys-=0{,0},\:,0#
 setlocal indentkeys+=0),=case.,=catch.,=catchd.,=catcht.,=do.,=else.,=elseif.,=end.,=fcase.
 
-let b:undo_indent = "setl indk< inde<"
+let b:undo_indent = 'setlocal indentkeys< indentexpr<'
 
-if exists("*GetJIndent")
+if exists('*GetJIndent')
   finish
 endif
 
@@ -27,11 +28,11 @@ function GetJIndent()
   let indent = indent(prevlnum)
   if getline(prevlnum) =~# '^\s*\%(case\|catch[dt]\=\|do\|else\%(if\)\=\|fcase\|for\%(_\a\k*\)\=\|if\|select\|try\|whil\%(e\|st\)\)\.'
     if getline(prevlnum) !~# '\<end\.'
-      let indent += &shiftwidth
+      let indent += shiftwidth()
     endif
   endif
-  if getline(v:lnum) =~# '^\s*\%(case\|catch[dt]\=\|do\|else\%(if\)\=\|end\|fcase\)\.'
-    let indent -= &shiftwidth
+  if getline(v:lnum) =~# '^\s*\%(\%(case\|catch[dt]\=\|do\|else\%(if\)\=\|end\|fcase\)\.\)\|)'
+    let indent -= shiftwidth()
   endif
   return indent
 endfunction
--- a/runtime/plugin/netrwPlugin.vim
+++ b/runtime/plugin/netrwPlugin.vim
@@ -1,6 +1,6 @@
 " netrwPlugin.vim: Handles file transfer and remote directory listing across a network
 "            PLUGIN SECTION
-" Date:		Dec 31, 2013
+" Date:		Jan 22, 2014
 " Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
 " Copyright:    Copyright (C) 1999-2013 Charles E. Campbell {{{1
@@ -20,7 +20,7 @@
 if &cp || exists("g:loaded_netrwPlugin")
  finish
 endif
-let g:loaded_netrwPlugin = "v150"
+let g:loaded_netrwPlugin = "v151"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** you need vim version 7.2 for this version of netrw"
@@ -43,6 +43,7 @@ set cpo&vim
 " Local Browsing Autocmds: {{{2
 augroup FileExplorer
  au!
+ au BufLeave *  if &ft != "netrw"|let w:netrw_prvfile= expand("%:p")|endif
  au BufEnter *	sil call s:LocalBrowse(expand("<amatch>"))
  au VimEnter *	sil call s:VimEnter(expand("<amatch>"))
  if has("win32") || has("win95") || has("win64") || has("win16")
@@ -66,11 +67,11 @@ augroup Network
 augroup END
 
 " Commands: :Nread, :Nwrite, :NetUserPass {{{2
-com! -count=1 -nargs=*	Nread		call netrw#NetrwSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetrwRestorePosn()
-com! -range=% -nargs=*	Nwrite		call netrw#NetrwSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetrwRestorePosn()
+com! -count=1 -nargs=*	Nread		call netrw#SavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#RestorePosn()
+com! -range=% -nargs=*	Nwrite		call netrw#SavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#RestorePosn()
 com! -nargs=*		NetUserPass	call NetUserPass(<f-args>)
-com! -nargs=*	        Nsource		call netrw#NetrwSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetrwRestorePosn()
-com! -nargs=?		Ntree		call netrw#NetrwSetTreetop(<q-args>)
+com! -nargs=*	        Nsource		call netrw#SavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#RestorePosn()
+com! -nargs=?		Ntree		call netrw#SetTreetop(<q-args>)
 
 " Commands: :Explore, :Sexplore, Hexplore, Vexplore, Lexplore {{{2
 com! -nargs=* -bar -bang -count=0 -complete=dir	Explore		call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
@@ -84,7 +85,7 @@ com! -nargs=* -bar       	  -complete=di
 
 " Commands: NetrwSettings {{{2
 com! -nargs=0	NetrwSettings	call netrwSettings#NetrwSettings()
-com! -bang	NetrwClean	call netrw#NetrwClean(<bang>0)
+com! -bang	NetrwClean	call netrw#Clean(<bang>0)
 
 " Maps:
 if !exists("g:netrw_nogx") && maparg('gx','n') == ""
@@ -118,11 +119,18 @@ fun! s:LocalBrowse(dirname)
 "   call Decho("(LocalBrowse) dirname<".a:dirname.">  (isdirectory, amiga)")
    if a:dirname != '' && isdirectory(a:dirname)
     sil! call netrw#LocalBrowseCheck(a:dirname)
+    if exists("w:netrw_bannercnt")
+     exe w:netrw_bannercnt
+    endif
    endif
 
   elseif isdirectory(a:dirname)
-"   call Decho("(LocalBrowse) dirname<".a:dirname.">  (isdirectory, not amiga)")
+"   call Decho("(LocalBrowse) dirname<".a:dirname."> ft=".&ft."  (isdirectory, not amiga)")
+"   call Dredir("LocalBrowse ft last set: ","verbose set ft")
    sil! call netrw#LocalBrowseCheck(a:dirname)
+   if exists("w:netrw_bannercnt")
+    exe w:netrw_bannercnt
+   endif
 
   else
    " not a directory, ignore it
--- a/runtime/syntax/euphoria4.vim
+++ b/runtime/syntax/euphoria4.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Euphoria 4.0.5 (http://www.openeuphoria.org/)
 " Maintainer:	Shian Lee  
-" Last Change:	2014 Feb 24 (for Vim 7.4)
+" Last Change:	2014 Feb 26 (for Vim 7.4)
 " Remark:       Euphoria has two syntax files, euphoria3.vim and euphoria4.vim; 
 "               For details see :help ft-euphoria-syntax
 
@@ -73,7 +73,7 @@ syn keyword euphoria4Library 	bytes_to_i
 syn keyword euphoria4Library 	canon2win canonical canonical_path ceil
 syn keyword euphoria4Library 	central_moment chance char_test chdir
 syn keyword euphoria4Library 	check_all_blocks check_break check_free_list
-syn keyword euphoria4Library 	checksum clear clear_directory close cmd_parse
+syn keyword euphoria4Library 	checksum clear clear_directory cmd_parse
 syn keyword euphoria4Library 	colors_to_attr columnize combine connect
 syn keyword euphoria4Library 	console_colors copy copy_file cosh count crash
 syn keyword euphoria4Library 	crash_file crash_message crash_routine create
@@ -174,7 +174,7 @@ syn keyword euphoria4Library 	writef wri
 
 " Library Identifiers (Type) - grep from $EUDIR/include/*:
 syn keyword euphoria4Type	ascii_string boolean bordered_address byte_range
-syn keyword euphoria4Type	case_flagset_type color cstring datetime
+syn keyword euphoria4Type	case_flagset_type color cstring 
 syn keyword euphoria4Type	file_number file_position graphics_point
 syn keyword euphoria4Type	integer_array lcid lock_type machine_addr map 
 syn keyword euphoria4Type	mixture number_array option_spec
@@ -201,8 +201,9 @@ syn match   euphoria4Operator	"[{}]"
 " Character constant:
 syn region  euphoria4Char	start=/'/ skip=/\\'\|\\\\/ end=/'/ oneline
 
-" Single and multiline string constant: 
-syn region  euphoria4String	start=/"\|b"\|x"/ skip=/\\"\|\\\\/ end=/"/ oneline
+" String constant (""" must be *after* "): 
+syn region  euphoria4String	start=/"/ skip=/\\"\|\\\\/ end=/"/ oneline 
+syn region  euphoria4String	start=/b"\|x"/ end=/"/ 
 syn region  euphoria4String	start=/`/ end=/`/
 syn region  euphoria4String	start=/"""/ end=/"""/
 
--- a/runtime/syntax/j.vim
+++ b/runtime/syntax/j.vim
@@ -1,45 +1,63 @@
 " Vim syntax file
 " Language:	J
 " Maintainer:	David Bürgin <676c7473@gmail.com>
-" Last Change:	2013-10-06
+" URL:		https://github.com/glts/vim-j
+" Last Change:	2014-03-17
 
-if exists("b:current_syntax")
+if exists('b:current_syntax')
   finish
 endif
 
 syntax case match
 syntax sync minlines=50
 
-syn match jControl /\<\%(assert\|break\|case\|catch[dt]\=\|continue\|do\|else\%(if\)\=\|end\|fcase\|for\|if\|return\|select\|throw\|try\|whil\%(e\|st\)\)\./
-syn match jControl /\<\%(for\|goto\|label\)_\a\k*\./
+syntax match jControl /\<\%(assert\|break\|case\|catch[dt]\=\|continue\|do\|else\%(if\)\=\|end\|fcase\|for\|if\|return\|select\|throw\|try\|whil\%(e\|st\)\)\./
+syntax match jControl /\<\%(for\|goto\|label\)_\a\k*\./
 
-syn region jString oneline start=/'/ skip=/''/ end=/'/
+" Standard library names defined in the z locale. A few verbs need to be
+" defined with ":syntax match" because they would otherwise take precedence
+" over the corresponding jControl items.
+syntax keyword jNoun ARGV BINPATH CR CRLF DEL Debug EAV EMPTY FF FHS IF64 IFIOS IFJCDROID IFJHS IFQT IFRASPI IFUNIX IFWIN IFWINCE IFWINE IFWOW64 JB01 JBOXED JCHAR JCMPX JFL JINT JPTR JSIZES JSTR JTYPES JVERSION LF LF2 TAB UNAME UNXLIB adverb andurl conjunction dbhelp dyad libjqt monad noun verb
+syntax keyword jAdverb define each every fapplylines inv inverse items leaf rows table
+syntax keyword jConjunction bind cuts def on
+syntax keyword jVerb AND Endian IFDEF Note OR XOR alpha17 alpha27 anddf android_exec_host andunzip apply boxopen boxxopen bx calendar cd cdcb cder cderx cdf charsub chopstring clear coclass cocreate cocurrent codestroy coerase cofind cofindv cofullname coinfo coinsert coname conames conew conl conouns conounsx copath copathnl copathnlx coreset costate cut cutLF cutopen cutpara datatype dbctx dberm dberr dbg dbjmp dblocals dblxq dblxs dbnxt dbq dbr dbret dbrr dbrrx dbrun dbs dbsig dbsq dbss dbst dbstack dbstk dbstop dbstopme dbstopnext dbstops dbtrace dbview deb debc delstring detab dfh dir dircompare dircompares dirfind dirpath dirss dirssrplc dirtree dirused dlb dltb dltbs dquote drop dropafter dropto dtb dtbs echo empty endian erase evtloop exit expand f2utf8 fappend fappends fboxname fc fcopynew fdir ferase fetch fexist fexists fgets file2url fixdotdot fliprgb fmakex foldpara foldtext fpathcreate fpathname fputs fread freadblock freadr freads frename freplace fsize fss fssrplc fstamp fstringreplace ftype fview fwrite fwritenew fwrites getargs getdate getenv getqtbin hfd hostpathsep ic install iospath isatty isotimestamp isutf8 jcwdpath joinstring jpathsep jsystemdefs list ljust load loadd mema memf memr memw nameclass namelist names nc nl pick quote require rjust rplc script scriptd setbreak show sign sminfo smoutput sort split splitnostring splitstring ss startupandroid startupconsole startupide stderr stdin stdout stringreplace symdat symget symset take takeafter taketo timespacex timestamp timex tmoutput toCRLF toHOST toJ todate todayno tolower topara toupper tsdiff tsrep tstamp type ucp ucpcount unxlib usleep utf8 uucp valdate wcsize weekday weeknumber weeksinyear winpathsep
+syntax match   jVerb /\<\%(assert\|break\|do\)\>\.\@!/
 
-" Patterns for numbers in general, rational numbers, numbers with explicit
-" base, infinities, and numbers with extended precision.
+syntax region jString oneline start=/'/ skip=/''/ end=/'/
+
+" Number patterns. Matching J numbers is difficult. The regular expression
+" used for the general case roughly embodies this grammar sketch:
 "
-" Matching J numbers is difficult. The regular expression used for the general
-" case roughly embodies this grammar sketch:
+"     BASE     := /_?\d+(\.\d*)?([eE]_?\d+)?/
+"     RATIONAL := BASE  |  BASE r BASE
+"     COMPLEX  := BASE  |  BASE (j|a[dr]) BASE
+"     JNUMBER  := RATIONAL  |  RATIONAL [px] RATIONAL  |  COMPLEX  |  COMPLEX [px] COMPLEX
 "
-"         EXP     := /_?\d+(\.\d*)?([eE]_?\d+)?/
-"         COMP    := EXP  |  EXP (j|a[dr]) EXP
-"         PIEU    := COMP  |  COMP [px] COMP
+" The grammar is implemented as shown in this pseudo-regexp:
 "
-" For the rest, a compromise between correctness and practicality was made.
-" See http://www.jsoftware.com/help/dictionary/dcons.htm for reference.
-syn match jNumber /\<_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%(\%(j\|a[dr]\)_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\)\=\%([px]_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%(\%(j\|a[dr]\)_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\)\=\)\=/
-syn match jNumber /\<_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=r_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=/
-syn match jNumber /\<_\=\d\+\%([eE]\d\+\)\=b_\=[0-9a-z]\+/
-syn match jNumber /\<__\=\>/
-syn match jNumber /\<_\=\d\+x\>/
+"        base         rational                       complex                       remainder
+"     /\< B  (  [r]B ([px]B([r]B)?)?  |  (j|a[dr])B ([px]B((j|a[dr])B)?)?  |  [px]B ((j|a[dr]|r)B)?  )?/
+"
+" All in all, a compromise between correctness and practicality had to be
+" made. See http://www.jsoftware.com/help/dictionary/dcons.htm for reference.
+syntax match jNumber /\<_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%(\%(r_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%([px]_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%(r_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\)\=\)\=\)\|\%(\%(j\|a[dr]\)_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%([px]_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%(\%(j\|a[dr]\)_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\)\=\)\=\)\|\%([px]_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%(\%(j\|a[dr]\|r\)_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\)\=\)\)\=/
+syntax match jNumber /\<_\=\d\+\%([eE]\d\+\)\=b_\=[0-9a-z]\+/
+syntax match jNumber /\<__\=\>/
+syntax match jNumber /\<_\=\d\+x\>/
 
-syn match jComment /NB\..*$/ contains=jTodo,@Spell
-syn keyword jTodo TODO FIXME XXX contained
+syntax keyword jTodo TODO FIXME XXX contained
+syntax match jComment /NB\..*$/ contains=jTodo,@Spell
+syntax match jSharpBang /\%^#!.*$/
 
-hi def link jControl Statement
-hi def link jString String
-hi def link jNumber Number
-hi def link jComment Comment
-hi def link jTodo Todo
+highlight default link jControl Statement
+highlight default link jNoun Identifier
+highlight default link jAdverb Identifier
+highlight default link jConjunction Identifier
+highlight default link jVerb Function
+highlight default link jString String
+highlight default link jNumber Number
+highlight default link jTodo Todo
+highlight default link jComment Comment
+highlight default link jSharpBang PreProc
 
-let b:current_syntax = "j"
+let b:current_syntax = 'j'
--- a/runtime/syntax/netrw.vim
+++ b/runtime/syntax/netrw.vim
@@ -1,7 +1,7 @@
 " Language   : Netrw Remote-Directory Listing Syntax
 " Maintainer : Charles E. Campbell, Jr.
-" Last change: Dec 18, 2012
-" Version    : 17
+" Last change: Mar 07, 2014
+" Version    : 18
 " ---------------------------------------------------------------------
 
 " Syntax Clearing: {{{1
@@ -42,8 +42,9 @@ syn match  netrwSortSeq		"Sort sequence:
 syn match  netrwCopyTgt		"Copy/Move Tgt:"		contained transparent skipwhite				nextgroup=netrwList
 syn match  netrwList		".*$"				contained		contains=netrwComma,@NoSpell
 syn match  netrwComma		","				contained
-syn region netrwQuickHelp	matchgroup=Comment start="Quick Help:\s\+" end="$"	contains=netrwHelpCmd,@NoSpell	keepend contained
-syn match  netrwHelpCmd		"\S\ze:"			contained skipwhite	contains=@NoSpell		nextgroup=netrwCmdSep
+syn region netrwQuickHelp	matchgroup=Comment start="Quick Help:\s\+" end="$"	contains=netrwHelpCmd,netrwQHTopic,@NoSpell	keepend contained
+syn match  netrwHelpCmd		"\S\+\ze:"			contained skipwhite	contains=@NoSpell		nextgroup=netrwCmdSep
+syn match  netrwQHTopic		"-\a\+-"			contained skipwhite
 syn match  netrwCmdSep		":"				contained nextgroup=netrwCmdNote
 syn match  netrwCmdNote		".\{-}\ze  "			contained		contains=@NoSpell
 syn match  netrwVersion		"(netrw.*)"			contained		contains=@NoSpell
@@ -80,6 +81,7 @@ if !exists("did_drchip_netrwlist_syntax"
  hi default link netrwComment	Comment
  hi default link netrwDir	Directory
  hi default link netrwHelpCmd	Function
+ hi default link netrwQHTopic	Number
  hi default link netrwHidePat	Statement
  hi default link netrwHideSep	netrwComment
  hi default link netrwList	Statement
--- a/runtime/syntax/sh.vim
+++ b/runtime/syntax/sh.vim
@@ -2,10 +2,10 @@
 " Language:		shell (sh) Korn shell (ksh) bash (sh)
 " Maintainer:		Charles E. Campbell  <NdrOchipS@PcampbellAfamily.Mbiz>
 " Previous Maintainer:	Lennart Schultz <Lennart.Schultz@ecmwf.int>
-" Last Change:		Jul 02, 2013
-" Version:		131
+" Last Change:		Mar 20, 2014
+" Version:		132
 " URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
-" For options and settings, please use:      :help ft-sh-syntax
+" For options and settings, please use:	:help ft-sh-syntax
 " This file includes many ideas from ?ric Brunet (eric.brunet@ens.fr)
 
 " For version 5.x: Clear all syntax items {{{1
@@ -151,18 +151,18 @@ endif
 " Error Codes: {{{1
 " ============
 if !exists("g:sh_no_error")
- syn match   shDoError "\<done\>"
- syn match   shIfError "\<fi\>"
- syn match   shInError "\<in\>"
- syn match   shCaseError ";;"
- syn match   shEsacError "\<esac\>"
- syn match   shCurlyError "}"
- syn match   shParenError ")"
- syn match   shOK	'\.\(done\|fi\|in\|esac\)'
+ syn match	shDoError	"\<done\>"
+ syn match	shIfError	"\<fi\>"
+ syn match	shInError	"\<in\>"
+ syn match	shCaseError	";;"
+ syn match	shEsacError	"\<esac\>"
+ syn match	shCurlyError	"}"
+ syn match	shParenError	")"
+ syn match	shOK	'\.\(done\|fi\|in\|esac\)'
  if exists("b:is_kornshell")
-  syn match     shDTestError "]]"
+   syn match	shDTestError	"]]"
  endif
- syn match     shTestError "]"
+ syn match	shTestError	"]"
 endif
 
 " Options: {{{1
@@ -321,12 +321,12 @@ elseif !exists("g:sh_no_error")
 endif
 syn region  shSingleQuote	matchgroup=shQuote start=+'+ end=+'+		contains=@Spell
 syn region  shDoubleQuote	matchgroup=shQuote start=+\%(\%(\\\\\)*\\\)\@<!"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell
-"syn region  shDoubleQuote	matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell
 syn match   shStringSpecial	"[^[:print:] \t]"	contained
 syn match   shStringSpecial	"\%(\\\\\)*\\[\\"'`$()#]"
-syn match   shSpecial	"[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial,shComment
-syn match   shSpecial	"^\%(\\\\\)*\\[\\"'`$()#]"	nextgroup=shComment
-syn match   shMoreSpecial	"\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial contained
+"syn match   shSpecial	"[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]"	nextgroup=shMoreSpecial,shComment
+syn match   shSpecial	"[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]"	nextgroup=shMoreSpecial
+syn match   shSpecial	"^\%(\\\\\)*\\[\\"'`$()#]"		nextgroup=shComment
+syn match   shMoreSpecial	"\%(\\\\\)*\\[\\"'`$()#]" 	contained	nextgroup=shMoreSpecial
 
 " Comments: {{{1
 "==========
@@ -363,9 +363,9 @@ elseif s:sh_fold_heredoc
  syn region shHereDoc matchgroup=shRedir19 fold start="<<\\\z([^ \t|]*\)"		matchgroup=shRedir19 end="^\z1\s*$"
 
 else
- syn region shHereDoc matchgroup=shRedir20 start="<<\s*\\\=\z([^ \t|]*\)"		matchgroup=shRedir20 end="^\z1\s*$"    contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir20 start="<<\s*\\\=\z([^ \t|]*\)"		matchgroup=shRedir20 end="^\z1\s*$"	contains=@shDblQuoteList
  syn region shHereDoc matchgroup=shRedir21 start="<<\s*\"\z([^ \t|]*\)\""		matchgroup=shRedir21 end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir22 start="<<-\s*\z([^ \t|]*\)"		matchgroup=shRedir22 end="^\s*\z1\s*$" contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir22 start="<<-\s*\z([^ \t|]*\)"		matchgroup=shRedir22 end="^\s*\z1\s*$"	contains=@shDblQuoteList
  syn region shHereDoc matchgroup=shRedir23 start="<<-\s*'\z([^ \t|]*\)'"		matchgroup=shRedir23 end="^\s*\z1\s*$"
  syn region shHereDoc matchgroup=shRedir24 start="<<\s*'\z([^ \t|]*\)'"		matchgroup=shRedir24 end="^\z1\s*$"
  syn region shHereDoc matchgroup=shRedir25 start="<<-\s*\"\z([^ \t|]*\)\""		matchgroup=shRedir25 end="^\s*\z1\s*$"
@@ -450,21 +450,21 @@ syn match  shDerefSpecial	contained	"\({
 syn match  shDerefVar	contained	"{\@<=\k\+"		nextgroup=@shDerefVarList
 
 " sh ksh bash : ${var[... ]...}  array reference: {{{1
-syn region  shDerefVarArray   contained	matchgroup=shDeref start="\[" end="]"	contains=@shCommandSubList nextgroup=shDerefOp,shDerefOpError
+syn region  shDerefVarArray	contained	matchgroup=shDeref start="\[" end="]"	contains=@shCommandSubList nextgroup=shDerefOp,shDerefOpError
 
 " Special ${parameter OPERATOR word} handling: {{{1
-" sh ksh bash : ${parameter:-word}    word is default value
-" sh ksh bash : ${parameter:=word}    assign word as default value
-" sh ksh bash : ${parameter:?word}    display word if parameter is null
-" sh ksh bash : ${parameter:+word}    use word if parameter is not null, otherwise nothing
-"    ksh bash : ${parameter#pattern}  remove small left  pattern
-"    ksh bash : ${parameter##pattern} remove large left  pattern
-"    ksh bash : ${parameter%pattern}  remove small right pattern
-"    ksh bash : ${parameter%%pattern} remove large right pattern
-"        bash : ${parameter^pattern}  Case modification
-"        bash : ${parameter^^pattern} Case modification
-"        bash : ${parameter,pattern}  Case modification
-"        bash : ${parameter,,pattern} Case modification
+" sh ksh bash : ${parameter:-word}	word is default value
+" sh ksh bash : ${parameter:=word}	assign word as default value
+" sh ksh bash : ${parameter:?word}	display word if parameter is null
+" sh ksh bash : ${parameter:+word}	use word if parameter is not null, otherwise nothing
+"    ksh bash : ${parameter#pattern}	remove small left  pattern
+"    ksh bash : ${parameter##pattern}	remove large left  pattern
+"    ksh bash : ${parameter%pattern}	remove small right pattern
+"    ksh bash : ${parameter%%pattern}	remove large right pattern
+"        bash : ${parameter^pattern}	Case modification
+"        bash : ${parameter^^pattern}	Case modification
+"        bash : ${parameter,pattern}	Case modification
+"        bash : ${parameter,,pattern}	Case modification
 syn cluster shDerefPatternList	contains=shDerefPattern,shDerefString
 if !exists("g:sh_no_error")
  syn match shDerefOpError	contained	":[[:punct:]]"
@@ -598,6 +598,7 @@ hi def link shSetOption	shOption
 hi def link shSingleQuote	shString
 hi def link shSource	shOperator
 hi def link shStringSpecial	shSpecial
+hi def link shStringSpecial	Unique
 hi def link shSubShRegion	shOperator
 hi def link shTestOpr	shConditional
 hi def link shTestPattern	shString
--- a/runtime/syntax/tex.vim
+++ b/runtime/syntax/tex.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	TeX
 " Maintainer:	Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
-" Last Change:	Jun 24, 2013
-" Version:	79
+" Last Change:	Mar 20, 2014
+" Version:	81
 " URL:		http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
 "
 " Notes: {{{1
@@ -28,6 +28,16 @@
 "    lexical error-checking will be done.
 "
 "    ie. let g:tex_no_error=1
+"
+" 6. Please see  :help latex-syntax  for information on
+"      syntax folding           :help tex-folding
+"      spell checking           :help tex-nospell
+"      commands and mathzones   :help tex-runon
+"      new command highlighting :help tex-morecommands
+"      error highlighting       :help tex-error
+"      new math groups          :help tex-math
+"      new styles               :help tex-style
+"      using conceal mode       :help tex-conceal
 
 " Version Clears: {{{1
 " For version 5.x: Clear all syntax items
@@ -139,7 +149,7 @@ else
  syn cluster texMatchGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
  syn cluster texStyleGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher
 endif
-syn cluster texPreambleMatchGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
+syn cluster texPreambleMatchGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
 syn cluster texRefGroup		contains=texMatcher,texComment,texDelimiter
 if !exists("tex_no_math")
  syn cluster texMathZones	contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
@@ -1144,7 +1154,7 @@ if has("conceal") && &enc == 'utf-8'
   else
    fun! s:Accents(chr,...)
      let i= 1
-     for accent in ["`","\\'","^",'"','\~','\.',"c","H","k","r","u","v"]
+     for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
       if i > a:0
        break
       endif
@@ -1160,46 +1170,46 @@ if has("conceal") && &enc == 'utf-8'
       let i= i + 1
      endfor
    endfun
-   "                  \`  \'  \^  \"  \~  \.  \c  \H  \k  \r  \u  \v
-   call s:Accents('a','à','á','â','ä','ã','ȧ',' ',' ','ą','å','ă','ă')
-   call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ',' ',' ','Ą','Å','Ă','Ă')
-   call s:Accents('c',' ','ć','ĉ',' ',' ','ċ','ç',' ',' ',' ',' ','č')
-   call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ','Ç',' ',' ',' ',' ','Č')
-   call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
-   call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
-   call s:Accents('e','è','é','ê','ë','ẽ','ė','ȩ',' ','ę',' ','ĕ','ě')
-   call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ȩ',' ','Ę',' ','Ĕ','Ě')
-   call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ','ģ',' ',' ',' ','ğ',' ')
-   call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ','Ģ',' ',' ',' ','Ğ',' ')
-   call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
-   call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
-   call s:Accents('i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ','ĭ',' ')
-   call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ',' ',' ',' ',' ','Ĭ',' ')
-   call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
-   call s:Accents('k',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ',' ')
-   call s:Accents('K',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ',' ')
-   call s:Accents('l',' ','ĺ','ľ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
-   call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
-   call s:Accents('n',' ','ń',' ',' ','ñ',' ','ņ',' ',' ',' ',' ','ň')
-   call s:Accents('N',' ','Ń',' ',' ','Ñ',' ','Ņ',' ',' ',' ',' ','Ň')
-   call s:Accents('o','ò','ó','ô','ö','õ','ȯ',' ','ő','ǫ',' ','ŏ',' ')
-   call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ',' ','Ő','Ǫ',' ','Ŏ',' ')
-   call s:Accents('r',' ','ŕ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
-   call s:Accents('R',' ','Ŕ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
-   call s:Accents('s',' ','ś','ŝ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
-   call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
-   call s:Accents('t',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
-   call s:Accents('T',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
-   call s:Accents('u','ù','ú','û','ü','ũ',' ',' ','ű','ų','ů','ŭ','ǔ')
-   call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ',' ','Ű','Ų','Ů','Ŭ','Ǔ')
-   call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
-   call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
-   call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ')
-   call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ')
-   call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ','ž')
-   call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ','Ž')
-   call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ','ĭ',' ')
-   "                  \`  \'  \^  \"  \~  \.  \c  \H  \k  \r  \u  \v
+   "                    \`  \'  \^  \"  \~  \.  \=  \c  \H  \k  \r  \u  \v
+   call   s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
+   call   s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
+   call   s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
+   call   s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
+   call   s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
+   call   s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
+   call   s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
+   call   s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
+   call   s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
+   call   s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
+   call   s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
+   call   s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
+   call   s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
+   call   s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
+   call   s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
+   call   s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
+   call   s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
+   call   s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
+   call   s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
+   call   s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
+   call   s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
+   call   s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
+   call   s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
+   call   s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
+   call   s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
+   call   s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
+   call   s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
+   call   s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
+   call   s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
+   call   s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
+   call   s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
+   call   s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
+   call   s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
+   call   s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
+   call   s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
+   call   s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
+   call   s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
+   call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
+   "                    \`  \'  \^  \"  \~  \.  \=  \c  \H  \k  \r  \u  \v
    delfun s:Accents
    syn match texAccent   '\\aa\>'	conceal cchar=å
    syn match texAccent   '\\AA\>'	conceal cchar=Å
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Vim 7.4 script
 " Maintainer:	Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Aug 16, 2013
-" Version:	7.4-1
+" Last Change:	Mar 20, 2014
+" Version:	7.4-27
 " Automatically generated keyword lists: {{{1
 
 " Quit when a syntax file was already loaded {{{2
@@ -14,40 +14,40 @@ set cpo&vim
 
 " vimTodo: contains common special-notices for comments {{{2
 " Use the vimCommentGroup cluster to add your own.
-syn keyword vimTodo contained	COMBAK	FIXME	TODO	XXX
 syn cluster vimCommentGroup	contains=vimTodo,@Spell
 
 " regular vim commands {{{2
-syn keyword vimCommand contained	a arga[dd] ar[gs] bar bn[ext] breaka[dd] bu bw[ipeout] caddf[ile] cd cgete[xpr] checkt[ime] cmdname cnf com con[tinue] cq[uit] cw[indow] delc[ommand] diffg[et] diffpu[t] dig[raphs] dr[op] earlier el[se] endfo[r] ene[w] filename fin[d] folddoc[losed] fu[nction] gui helpg[rep] ia in j[oin] kee[pmarks] laddf[ile] lb[uffer] le[ft] lgetb[uffer] l[ist] lN lNf lo[adview] lpf[ile] luado mak[e] menut[ranslate] mks[ession] mod[e] n new noautocmd on[ly] pc[lose] popu p[rint] promptr[epl] ptn pts[elect] py[thon] quote redi[r] res[ize] ru rv[iminfo] sbf[irst] sbr[ewind] scscope sfir[st] sim[alt] sme snoreme spe spellw[rong] star st[op] sunmenu syn ta tabf[ind] tabnew tabr[ewind] tcld[o] tj[ump] tN tp[revious] tu u[ndo] unlo[ckvar] verb[ose] vim[grep] vne[w] win wn[ext] w[rite] xa[ll] XMLent xunme
-syn keyword vimCommand contained	ab argd[elete] argu[ment] bd[elete] bN[ext] breakd[el] buf c cal[l] ce[nter] cg[etfile] cl cn cNf comc[lear] cope[n] cr[ewind] d d[elete] diffo diffsplit di[splay] ds[earch] ec elsei[f] endfun ex files fini[sh] foldd[oopen] g gvim helpt[ags] iabc[lear] index ju[mps] l lan lc[d] lefta[bove] lgete[xpr] ll lne lnf[ile] locale lp[revious] luafile Man mes mksp[ell] m[ove] N n[ext] noh[lsearch] o[pen] pe popu[p] P[rint] ps[earch] ptN pu[t] python3 r red[o] ret[ab] rub[y] sal[l] sbl[ast] sb[uffer] se[t] sh[ell] sl smenu snoremenu spelld[ump] sp[lit] start stopi[nsert] sus[pend] sync tab tabfir[st] tabn[ext] tabs tclf[ile] tl[ast] tn[ext] tr tu[nmenu] undoj[oin] uns[ilent] ve[rsion] vimgrepa[dd] vs[plit] winc[md] wN[ext] ws[verb] x[it] XMLns xunmenu
-syn keyword vimCommand contained	abc[lear] argdo as[cii] bel[owright] bo[tright] breakl[ist] bufdo cabc[lear] cat[ch] cex[pr] c[hange] cla[st] cN cnf[ile] comment co[py] cs de delf diffoff difft dj[ump] dsp[lit] echoe[rr] em[enu] endf[unction] exi[t] filet fir[st] foldo[pen] get h hi if intro k la lan[guage] lch[dir] let@ lg[etfile] lla[st] lnew[er] lNf[ile] loc[kmarks] lr[ewind] lv[imgrep] ma[rk] messages mkv mv nbc[lose] N[ext] nu[mber] opt[ions] ped[it] pp[op] pro pta[g] ptn[ext] pw[d] q re redr[aw] retu[rn] rubyd[o] san[dbox] sbm[odified] scrip setf[iletype] si sla[st] sn[ext] s@\n@\=\r" spe[llgood] spr[evious] startg[replace] sts[elect] sv[iew] syncbind tabc[lose] tabl[ast] tabN[ext] ta[g] te[aroff] tm tN[ext] tr[ewind] u undol[ist] up[date] vert[ical] vi[sual] w windo wp[revious] wundo xmapc[lear] xnoreme xwininfo
-syn keyword vimCommand contained	abo[veleft] arge[dit] au bf[irst] bp[revious] br[ewind] b[uffer] cad cb[uffer] cf[ile] changes cl[ist] cnew[er] cNf[ile] comp[iler] count cscope debug delf[unction] DiffOrig diffthis dl[ist] dwim echom[sg] emenu* en[dif] exu[sage] filetype fix[del] for go[to] ha[rdcopy] hid[e] ij[ump] is[earch] keepa lad la[st] lcl[ose] lex[pr] lgr[ep] lli[st] lne[xt] lo lockv[ar] ls lvimgrepa[dd] marks mk mkvie[w] mz nb[key] nkf o ownsyntax pe[rl] pr profd[el] ptf[irst] ptN[ext] py qa[ll] r[ead] redraws[tatus] rew[ind] rubyf[ile] sa[rgument] sbn[ext] scripte[ncoding] setg[lobal] sig sl[eep] sN[ext] so spelli[nfo] sre[wind] star[tinsert] sun[hide] sw[apname] synlist tabd[o] tabm[ove] tabo[nly] tags tf[irst] tm[enu] TOhtml try un unh[ide] v vi viu[sage] wa[ll] winp[os] wq wv[iminfo] xme xnoremenu y[ank]
-syn keyword vimCommand contained	al[l] argg[lobal] bad[d] bl[ast] br bro[wse] buffers caddb[uffer] cc cfir[st] chd[ir] clo[se] cn[ext] col[der] con cpf[ile] cstag debugg[reedy] delm[arks] diffp diffu[pdate] do e echon en endt[ry] f fin fo[ld] fu gr[ep] h[elp] his[tory] il[ist] isp[lit] keepalt laddb[uffer] lat lcs lf[ile] lgrepa[dd] lmak[e] lN[ext] loadk lol[der] lt[ag] lw[indow] mat[ch] mkdir mkv[imrc] mzf[ile] nbs[tart] nmapc[lear] ol[dfiles] p perld[o] pre[serve] prof[ile] ptj[ump] ptp[revious] py3 q[uit] rec[over] reg[isters] ri[ght] rundo sav[eas] sbN[ext] scrip[tnames] setl[ocal] sign sm[agic] sni[ff] sor[t] spellr[epall] st startr[eplace] sunme sy t tabe[dit] tabN tabp[revious] tc[l] th[row] tn to[pleft] ts[elect] una[bbreviate] unl ve vie[w] vmapc[lear] wh[ile] win[size] wqa[ll] x xmenu xterm errormsg
-syn keyword vimCommand contained	ar argl[ocal] ba[ll] bm[odified] brea[k] browseset bun[load] cad[dexpr] ccl[ose] cgetb[uffer] che[ckpath] cmapc[lear] cN[ext] colo[rscheme] conf[irm] cp[revious] cuna[bbrev] del di diffpatch dig doau ea e[dit] endf endw[hile] f[ile] fina[lly] foldc[lose] fun grepa[dd] helpf[ind] i imapc[lear] iuna[bbrev] keepj[umps] lad[dexpr] later lcscope lfir[st] lh[elpgrep] lmapc[lear] lnf loadkeymap lop[en] lua ma menut mk[exrc] mo mz[scheme] ne noa omapc[lear] P po[p] prev[ious] promptf[ind] ptl[ast] ptr[ewind] pyf[ile] quita[ll] red Ren rightb[elow] ru[ntime] sba[ll] sbp[revious] scs sf[ind] sil[ent] sm[ap] sno[magic] so[urce] spellu[ndo] sta[g] stj[ump] 
+syn keyword vimCommand contained	a arga[dd] ar[gs] bd[elete] bN[ext] breakd[el] bufdo cabc[lear] cat[ch] cex[pr] c[hange] cla[st] cnew[er] cNf[ile] con cp[revious] cuna[bbrev] del deletep delm[arks] diffp[atch] dig[raphs] do e echon endf endw[hile] f[ile] fin[d] folddoc[losed] fu[nction] gvim helpt[ags] iabc[lear] intro k l lan lc[d] lefta[bove] lg[etfile] lla[st] lnew[er] lNf[ile] lockv[ar] ls lvimgrepa[dd] mat[ch] mk[exrc] mo n n[ext] o ownsyntax perld[o] pre[serve] promptf[ind] ptl[ast] ptr[ewind] py3do qa[ll] r[ead] redr[aw] retu[rn] rub[y] rv[iminfo] sba[ll] sbN[ext] scripte[ncoding] setf[iletype] sh[ell] sim[alt] sm[ap] sni[ff] sor[t] spelli[nfo] spr[evious] start st[op] sunmenu syn ta tabf[ind] tabnew tabr[ewind] tcld[o] tj[ump] tN tr tu[nmenu] undoj[oin] uns[ilent] ve[rsion] vimgrepa[dd] vs[plit] winc[md] wN[ext] ws[verb] x[it] xnoremenu
+syn keyword vimCommand contained	ab argd[elete] argu[ment] bel[owright] bo[tright] breakl[ist] b[uffer] cad cb[uffer] cf[ile] changes cl[ist] cn[ext] col[der] conf[irm] cq[uit] cw[indow] delc[ommand] deletl delp diffpu[t] dir doau ea e[dit] endfo[r] ene[w] files fini[sh] foldd[oopen] g h hi if is[earch] keepa la lan[guage] lch[dir] lex[pr] lgr[ep] lli[st] lne[xt] lo lol[der] lt[ag] lw[indow] menut mks[ession] mod[e] nbc[lose] nmapc[lear] ol[dfiles] p po[p] prev[ious] promptr[epl] ptn pts[elect] pydo q[uit] rec[over] redraws[tatus] rew[ind] rubyd[o] sal[l] sbf[irst] sbp[revious] scrip[tnames] setg[lobal] si sl sme sno[magic] so[urce] spellr[epall] sre[wind] startg[replace] stopi[nsert] sus[pend] sync tab tabfir[st] tabn[ext] tabs tclf[ile] tl[ast] tn[ext] tr[ewind] u undol[ist] up[date] vert[ical] vi[sual] w windo wp[revious] wundo xmapc[lear] xunme
+syn keyword vimCommand contained	abc[lear] argdo as[cii] bf[irst] bp[revious] br[ewind] buffers caddb[uffer] cc cfir[st] chd[ir] clo[se] cN[ext] colo[rscheme] con[tinue] cr[ewind] d delel deletp dep diffs[plit] di[splay] dp earlier el[se] endfun ex filet fir[st] foldo[pen] go[to] ha[rdcopy] hid[e] ij[ump] isp[lit] keepalt lad la[st] lcl[ose] lf[ile] lgrepa[dd] lmak[e] lN[ext] loadk lop[en] lua ma menut[ranslate] mksp[ell] m[ove] nb[key] noa omapc[lear] pc[lose] popu p[rint] ps[earch] ptN pu[t] pyf[ile] quita[ll] red reg[isters] ri[ght] rubyf[ile] san[dbox] sbl[ast] sbr[ewind] scs setl[ocal] sig sla[st] smenu snoreme spe spellu[ndo] st star[tinsert] sts[elect] sv[iew] syncbind tabc[lose] tabl[ast] tabN[ext] ta[g] te[aroff] tm tN[ext] try un unh[ide] v vi viu[sage] wa[ll] winp[os] wq wv[iminfo] xme xunmenu
+syn keyword vimCommand contained	abo[veleft] arge[dit] au bl[ast] br bro[wse] bun[load] cad[dexpr] ccl[ose] cgetb[uffer] che[ckpath] cmapc[lear] cnf com cope[n] cs de delep delf di difft[his] dj[ump] dr[op] ec elsei[f] endf[unction] exi[t] filetype fix[del] for gr[ep] h[elp] his[tory] il[ist] iuna[bbrev] keepj[umps] laddb[uffer] lat lcs lfir[st] lh[elpgrep] lmapc[lear] lnf loadkeymap lpf[ile] luado mak[e] mes mkv mz nbs[tart] noautocmd on[ly] pe popu[p] pro pta[g] ptn[ext] pw[d] py[thon] r redi[r] res[ize] rightb[elow] rundo sa[rgument] sbm[odified] sb[uffer] scscope sf[ind] sign sl[eep] sn[ext] snoremenu spelld[ump] spellw[rong] sta[g] startr[eplace] sun[hide] sw[apname] syntime tabd[o] tabm[ove] tabo[nly] tags tf[irst] tm[enu] to[pleft] ts[elect] una[bbreviate] unl ve vie[w] vmapc[lear] wh[ile] win[size] wqa[ll] x xmenu xwininfo
+syn keyword vimCommand contained	al[l] argg[lobal] bad[d] bm[odified] brea[k] bu bw[ipeout] caddf[ile] cd cgete[xpr] checkt[ime] cn cNf comc[lear] co[py] cscope debug d[elete] delf[unction] diffg[et] diffu[pdate] dl ds[earch] echoe[rr] em[enu] en[dif] exu[sage] fin fo[ld] fu grepa[dd] helpf[ind] i imapc[lear] j[oin] kee[pmarks] lad[dexpr] later lcscope lgetb[uffer] l[ist] lN lNf lo[adview] lp[revious] luafile ma[rk] messages mkvie[w] mzf[ile] ne noh[lsearch] o[pen] ped[it] pp[op] profd[el] ptf[irst] ptN[ext] py python3 re red[o] ret[ab] ru ru[ntime] sav[eas] sbn[ext] scrip se[t] sfir[st] sil[ent] sm[agic] sN[ext] so spe[llgood] sp[lit] star stj[ump] sunme sy t tabe[dit] tabN tabp[revious] tc[l] th[row] tn tp[revious] tu u[ndo] unlo[ckvar] verb[ose] vim[grep] vne[w] win wn[ext] w[rite] xa[ll] xnoreme y[ank]
+syn keyword vimCommand contained	ar argl[ocal] ba[ll] bn[ext] breaka[dd] buf c cal[l] ce[nter] cg[etfile] cl cN cnf[ile] comp[iler] cpf[ile] cstag debugg[reedy] deletel dell diffo[ff] dig dli[st] dsp[lit] echom[sg] en endt[ry] f fina[lly] foldc[lose] fun gui helpg[rep] ia in ju[mps] keepp[atterns] laddf[ile] lb[uffer] le[ft] lgete[xpr] ll lne lnf[ile] loc[kmarks] lr[ewind] lv[imgrep] marks mk mkv[imrc] mz[scheme] new nu[mber] opt[ions] pe[rl] pr prof[ile] ptj[ump] ptp[revious] py3 q 
 syn match   vimCommand contained	"\<z[-+^.=]\="
+syn keyword vimStdPlugin contained	DiffOrig Man N[ext] P[rint] S TOhtml XMLent XMLns 
 
 " vimOptions are caught only when contained in a vimSet {{{2
-syn keyword vimOption contained	acd ambiwidth arabicshape autowriteall backupdir bdlay binary breakat bufhidden cd ci cinw co commentstring confirm cpoptions cscoperelative csre cursorcolumn delcombine diffopt ea efm ep et fdc fdo ffs fk foldcolumn foldmethod formatoptions gd go guifont guitabtooltip hid hkp iconstring imd include inex isi js kp linebreak lm lz matchpairs maxmemtot mkspellmem mod mousef mouset nf oft pa path pheader previewheight printmbcharset pvw remap rl ruf sc scrollopt selectmode shellpipe shellxquote showcmd sidescroll smartindent sol spellsuggest sr stal sua swf syntax taglength tbidi terse tildeop tl tpm ttimeoutlen ttymouse udf undoreload vbs vi vop wcm whichwrap wildignore winaltkeys winminwidth wmnu write
-syn keyword vimOption contained	ai ambw ari aw backupext beval biosk brk buflisted cdpath cin cinwords cocu compatible consk cpt cscopetag cst cursorline dex digraph ead ei equalalways eventignore fde fdt fileencoding fkmap foldenable foldminlines formatprg gdefault gp guifontset helpfile hidden hl ignorecase imdisable includeexpr inf isident key langmap lines lmap ma matchtime mco ml modeline mousefocus mousetime nrformats ofu para pdev pi previewwindow printmbfont qe report rlc ruler scb scs sessionoptions shellquote shiftround showfulltag sidescrolloff smarttab sp spf srr startofline suffixes switchbuf ta tagrelative tbis textauto timeout tm tr ttm ttyscroll udir updatecount vdir viewdir wa wd wi wildignorecase window winwidth wmw writeany
-syn keyword vimOption contained	akm anti arshape awa backupskip bex bioskey browsedir buftype cedit cindent clipboard cole complete conskey crb cscopetagorder csto cwh dg dip eadirection ek equalprg ex fdi fen fileencodings flp foldexpr foldnestmax fp gfm grepformat guifontwide helpheight highlight hlg im imi incsearch infercase isk keymap langmenu linespace loadplugins macatsui maxcombine mef mls modelines mousehide mp nu omnifunc paragraphs penc pm printdevice printoptions quoteescape restorescreen rnu rulerformat scr sect sft shellredir shiftwidth showmatch siso smc spc spl ss statusline suffixesadd sws tabline tags tbs textmode timeoutlen to ts tty ttytype ul updatetime ve viewoptions wak weirdinvert wic wildmenu winfixheight wiv wop writebackup
-syn keyword vimOption contained	al antialias autochdir background balloondelay bexpr bk bs casemap cf cink cmdheight colorcolumn completefunc copyindent cryptmethod cscopeverbose csverb debug dict dir eb enc errorbells expandtab fdl fenc fileformat fml foldignore foldopen fs gfn grepprg guiheadroom helplang history hls imactivatekey iminsert inde insertmode iskeyword keymodel laststatus lisp lpl magic maxfuncdepth menuitems mm modifiable mousem mps number opendevice paste pex pmbcs printencoding prompt rdt revins ro runtimepath scroll sections sh shellslash shm showmode sj smd spell splitbelow ssl stl sw sxe tabpagemax tagstack tenc textwidth title toolbar tsl ttybuiltin tw undodir ur verbose viminfo warn wfh wig wildmode winfixwidth wiw wrap writedelay
-syn keyword vimOption contained	aleph ar autoindent backspace ballooneval bg bkc bsdir cb cfu cinkeys cmdwinheight columns completeopt cot cscopepathcomp cspc cuc deco dictionary directory ed encoding errorfile exrc fdls fencs fileformats fmr foldlevel foldtext fsync gfs gtl guioptions hf hk hlsearch imak ims indentexpr is isp keywordprg lazyredraw lispwords ls makeef maxmapdepth mfd mmd modified mousemodel msm numberwidth operatorfunc pastetoggle pexpr pmbfn printexpr pt readonly ri rs sb scrollbind secure shcf shelltemp shortmess showtabline slm sn spellcapcheck splitright ssop stmp swapfile sxq tabstop tal term tf titlelen toolbariconsize tsr ttyfast tx undofile ut verbosefile virtualedit wb wfw wildchar wildoptions winheight wm wrapmargin ws
-syn keyword vimOption contained	allowrevins arab autoread backup balloonexpr bh bl bsk cc ch cino cmp com concealcursor cp cscopeprg csprg cul def diff display edcompatible endofline errorformat fcl fdm fex filetype fo foldlevelstart formatexpr ft gfw gtt guipty hh hkmap ic imc imsearch indentkeys isf isprint km lbr list lsp makeprg maxmem mh mmp more mouses mzq nuw opfunc patchexpr pfn popt printfont pumheight redrawtime rightleft rtp sbo scrolljump sel shell shelltype shortname shq sm so spellfile spr st sts swapsync syn tag tb termbidi tgst titleold top ttimeout ttym uc undolevels vb vfile visualbell wc wh wildcharm wim winminheight wmh wrapscan ww
-syn keyword vimOption contained	altkeymap arabic autowrite backupcopy bdir bin bomb bt ccv charconvert cinoptions cms comments conceallevel cpo cscopequickfix csqf cursorbind define diffexpr dy ef eol esckeys fcs fdn ff fillchars foldclose foldmarker formatlistpat gcr ghr guicursor guitablabel hi hkmapp icon imcmdline inc indk isfname joinspaces kmp lcs listchars lw mat maxmempattern mis mmt mouse mouseshape mzquantum odev osfiletype patchmode ph preserveindent printheader pvh relativenumber rightleftcmd ru sbr scrolloff selection shellcmdflag shellxescape showbreak si smartcase softtabstop spelllang sps sta su swb synmaxcol tagbsearch tbi termencoding thesaurus titlestring 
+syn keyword vimOption contained	acd ambiwidth arabicshape autowriteall backupdir bdlay binary breakat bufhidden cd ci cinw co commentstring confirm cpoptions cscoperelative csre cursorcolumn delcombine diffopt ea efm ep et fdc fdo ffs filetype fo foldlevelstart formatexpr ft gfw gtt guipty hh hkmap ic imaf iminsert includeexpr inf isident key langmap lines lmap ma matchtime mco ml modeline mousefocus mousetime nrformats ofu para pdev pi previewwindow printmbfont qe relativenumber rightleftcmd ru sbr scrolloff selection shellcmdflag shellxescape showbreak si smartcase softtabstop spelllang sps sta su swb synmaxcol tagbsearch tbi termencoding thesaurus titlestring tpm ttm ttytype undodir ut vfile vop wcm whichwrap wildignore winaltkeys winminwidth wmnu write
+syn keyword vimOption contained	ai ambw ari aw backupext beval biosk brk buflisted cdpath cin cinwords cocu compatible consk cpt cscopetag cst cursorline dex digraph ead ei equalalways eventignore fde fdt fic fillchars foldclose foldmarker formatlistpat gcr ghr guicursor guitablabel hi hkmapp icon imak ims incsearch infercase isk keymap langmenu linespace loadplugins macatsui maxcombine mef mls modelines mousehide mp nu omnifunc paragraphs penc pm printdevice printoptions quoteescape remap rl ruf sc scrollopt selectmode shellpipe shellxquote showcmd sidescroll smartindent sol spellsuggest sr stal sua swf syntax taglength tbidi terse tildeop tl tr tty tw undofile vb vi wa wd wi wildignorecase window winwidth wmw writeany
+syn keyword vimOption contained	akm anti arshape awa backupskip bex bioskey browsedir buftype cedit cindent clipboard cole complete conskey crb cscopetagorder csto cwh dg dip eadirection ek equalprg ex fdi fen fileencoding fk foldcolumn foldmethod formatoptions gd go guifont guitabtooltip hid hkp iconstring imc imsearch inde insertmode iskeyword keymodel laststatus lisp lpl magic maxfuncdepth menuitems mm modifiable mousem mps number opendevice paste pex pmbcs printencoding prompt rdt report rlc ruler scb scs sessionoptions shellquote shiftround showfulltag sidescrolloff smarttab sp spf srr startofline suffixes switchbuf ta tagrelative tbis textauto timeout tm ts ttybuiltin tx undolevels vbs viewdir wak weirdinvert wic wildmenu winfixheight wiv wop writebackup
+syn keyword vimOption contained	al antialias autochdir background balloondelay bexpr bk bs casemap cf cink cmdheight colorcolumn completefunc copyindent cryptmethod cscopeverbose csverb debug dict dir eb enc errorbells expandtab fdl fenc fileencodings fkmap foldenable foldminlines formatprg gdefault gp guifontset helpfile hidden hl ignorecase imcmdline imsf indentexpr is isp keywordprg lazyredraw lispwords ls makeef maxmapdepth mfd mmd modified mousemodel msm numberwidth operatorfunc pastetoggle pexpr pmbfn printexpr pt re restorescreen rnu rulerformat scr sect sft shellredir shiftwidth showmatch siso smc spc spl ss statusline suffixesadd sws tabline tags tbs textmode timeoutlen to tsl ttyfast uc undoreload vdir viewoptions warn wfh wig wildmode winfixwidth wiw wrap writedelay
+syn keyword vimOption contained	aleph ar autoindent backspace ballooneval bg bkc bsdir cb cfu cinkeys cmdwinheight columns completeopt cot cscopepathcomp cspc cuc deco dictionary directory ed encoding errorfile exrc fdls fencs fileformat flp foldexpr foldnestmax fp gfm grepformat guifontwide helpheight highlight hlg im imd imstatusfunc indentkeys isf isprint km lbr list lsp makeprg maxmem mh mmp more mouses mzq nuw opfunc patchexpr pfn popt printfont pumheight readonly revins ro runtimepath scroll sections sh shellslash shm showmode sj smd spell splitbelow ssl stl sw sxe tabpagemax tagstack tenc textwidth title toolbar tsr ttym udf updatecount ve viminfo wb wfw wildchar wildoptions winheight wm wrapmargin ws
+syn keyword vimOption contained	allowrevins arab autoread backup balloonexpr bh bl bsk cc ch cino cmp com concealcursor cp cscopeprg csprg cul def diff display edcompatible endofline errorformat fcl fdm fex fileformats fml foldignore foldopen fs gfn grepprg guiheadroom helplang history hls imactivatefunc imdisable inc indk isfname joinspaces kmp lcs listchars lw mat maxmempattern mis mmt mouse mouseshape mzquantum odev osfiletype patchmode ph preserveindent printheader pvh redrawtime ri rs sb scrollbind secure shcf shelltemp shortmess showtabline slm sn spellcapcheck splitright ssop stmp swapfile sxq tabstop tal term tf titlelen toolbariconsize ttimeout ttymouse udir updatetime verbose virtualedit wc wh wildcharm wim winminheight wmh wrapscan ww
+syn keyword vimOption contained	altkeymap arabic autowrite backupcopy bdir bin bomb bt ccv charconvert cinoptions cms comments conceallevel cpo cscopequickfix csqf cursorbind define diffexpr dy ef eol esckeys fcs fdn ff fileignorecase fmr foldlevel foldtext fsync gfs gtl guioptions hf hk hlsearch imactivatekey imi include inex isi js kp linebreak lm lz matchpairs maxmemtot mkspellmem mod mousef mouset nf oft pa path pheader previewheight printmbcharset pvw regexpengine rightleft rtp sbo scrolljump sel shell shelltype shortname shq sm so spellfile spr st sts swapsync syn tag tb termbidi tgst titleold top ttimeoutlen ttyscroll ul ur verbosefile visualbell 
 
 " vimOptions: These are the turn-off setting variants {{{2
-syn keyword vimOption contained	noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobinary nobk nobuflisted nocin noconfirm nocopyindent nocscopetag nocsverb nocursorbind nodeco nodiff noeb noek noequalalways noesckeys noex noexrc nofk nofoldenable nogdefault nohid nohk nohkmapp nohls noic noignorecase noimc noimd noincsearch noinfercase nois nojs nolbr nolisp noloadplugins nolz nomacatsui nomh nomod nomodifiable nomore nomousefocus nonu noodev nopaste nopreserveindent noprompt noreadonly noremap norevins norightleft nornu nors noruler nosc noscrollbind nosecure noshellslash noshiftround noshowcmd noshowmatch nosi nosmartcase nosmarttab nosn nospell nosplitright nosr nosta nostmp noswf notagbsearch notagstack notbidi notermbidi notextauto notf notildeop notitle notop nottimeout nottyfast novb nowa nowb nowfh nowildignorecase* * nowinfixheight nowiv nowrap nowrite nowritebackup
-syn keyword vimOption contained	noai noaltkeymap noar noarabicshape noautochdir noautowrite noawa nobeval nobiosk nobl nocf nocindent noconsk nocp nocscopeverbose nocuc nocursorcolumn nodelcombine nodigraph noed noendofline noerrorbells noet noexpandtab nofen nofkmap nogd noguipty nohidden nohkmap nohkp nohlsearch noicon noim noimcmdline noimdisable noinf noinsertmode nojoinspaces nolazyredraw nolinebreak nolist nolpl noma nomagic noml nomodeline nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw norelativenumber norestorescreen nori norl noro noru nosb noscb noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx novisualbell nowarn noweirdinvert nowfw nowildmenu nowinfixwidth nowmnu nowrapscan nowriteany nows
-syn keyword vimOption contained	noakm noanti noarab noari noautoindent noautowriteall nobackup nobin nobioskey nobomb noci nocompatible noconskey nocrb nocst nocul nocursorline nodg noea noedcompatible noeol 
+syn keyword vimOption contained	noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobinary nobk nobuflisted nocin noconfirm nocopyindent nocscoperelative nocsre nocuc nocursorcolumn nodelcombine nodigraph noed noendofline noerrorbells noex nofen nofk nogd nohid nohkmap nohkp nohlsearch noicon noim noimcmdline noimdisable noinf noinsertmode nojoinspaces nolazyredraw nolinebreak nolist nolpl noma nomagic noml nomodeline nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw norelativenumber norestorescreen nori norl noro noru nosb noscb noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx noundofile novisualbell nowarn noweirdinvert nowfw nowildignorecase nowinfixheight nowiv nowrap nowrite nowritebackup
+syn keyword vimOption contained	noai noaltkeymap noar noarabicshape noautochdir noautowrite noawa nobeval nobiosk nobl nocf nocindent noconsk nocp nocscopetag nocst nocul nocursorline nodg noea noedcompatible noeol noesckeys noexpandtab nofic nofkmap nogdefault nohidden nohkmapp nohls noic noignorecase noimc noimd noincsearch noinfercase nois nojs nolbr nolisp noloadplugins nolz nomacatsui nomh nomod nomodifiable nomore nomousefocus nonu noodev nopaste nopreserveindent noprompt noreadonly noremap norevins norightleft nornu nors noruler nosc noscrollbind nosecure noshellslash noshiftround noshowcmd noshowmatch nosi nosmartcase nosmarttab nosn nospell nosplitright nosr nosta nostmp noswf notagbsearch notagstack notbidi notermbidi notextauto notf notildeop notitle notop nottimeout nottyfast noudf novb nowa nowb nowfh nowic nowildmenu nowinfixwidth nowmnu nowrapscan nowriteany nows
+syn keyword vimOption contained	noakm noanti noarab noari noautoindent noautowriteall nobackup nobin nobioskey nobomb noci nocompatible noconskey nocrb nocscopeverbose nocsverb nocursorbind nodeco nodiff noeb noek noequalalways noet noexrc nofileignorecase nofoldenable noguipty nohk 
 
 " vimOptions: These are the invertible variants {{{2
-syn keyword vimOption contained	invacd invallowrevins invantialias invarabic invarshape invautoread invaw invballooneval invbinary invbk invbuflisted invcin invconfirm invcopyindent invcscopetag invcsverb invcursorbind invdeco invdiff inveb invek invequalalways invesckeys invex invexrc invfk invfoldenable invgdefault invhid invhk invhkmapp invhls invic invignorecase invimc invimd invincsearch invinfercase invis invjs invlbr invlisp invloadplugins invlz invmacatsui invmh invmod invmodifiable invmore invmousefocus invnu invodev invpaste invpreserveindent invprompt invreadonly invremap invrevins invrightleft invrnu invrs invruler invsc invscrollbind invsecure invshellslash invshiftround invshowcmd invshowmatch invsi invsmartcase invsmarttab invsn invspell invsplitright invsr invsta invstmp invswf invtagbsearch invtagstack invtbidi invtermbidi invtextauto invtf invtildeop invtitle invtop invttimeout invttyfast invvb invwa invwb invwfh invwildignorecase* * invwinfixheight invwiv invwrap invwrite invwritebackup
-syn keyword vimOption contained	invai invaltkeymap invar invarabicshape invautochdir invautowrite invawa invbeval invbiosk invbl invcf invcindent invconsk invcp invcscopeverbose invcuc invcursorcolumn invdelcombine invdigraph inved invendofline inverrorbells invet invexpandtab invfen invfkmap invgd invguipty invhidden invhkmap invhkp invhlsearch invicon invim invimcmdline invimdisable invinf invinsertmode invjoinspaces invlazyredraw invlinebreak invlist invlpl invma invmagic invml invmodeline invmodified invmousef invmousehide invnumber invopendevice invpi invpreviewwindow invpvw invrelativenumber invrestorescreen invri invrl invro invru invsb invscb invscs invsft invshelltemp invshortname invshowfulltag invshowmode invsm invsmartindent invsmd invsol invsplitbelow invspr invssl invstartofline invswapfile invta invtagrelative invtbi invtbs invterse invtextmode invtgst invtimeout invto invtr invttybuiltin invtx invvisualbell invwarn invweirdinvert invwfw invwildmenu invwinfixwidth invwmnu invwrapscan invwriteany invws
-syn keyword vimOption contained	invakm invanti invarab invari invautoindent invautowriteall invbackup invbin invbioskey invbomb invci invcompatible invconskey invcrb invcst invcul invcursorline invdg invea invedcompatible inveol 
+syn keyword vimOption contained	invacd invallowrevins invantialias invarabic invarshape invautoread invaw invballooneval invbinary invbk invbuflisted invcin invconfirm invcopyindent invcscoperelative invcsre invcuc invcursorcolumn invdelcombine invdigraph inved invendofline inverrorbells invex invfen invfk invgd invhid invhkmap invhkp invhlsearch invicon invim invimcmdline invimdisable invinf invinsertmode invjoinspaces invlazyredraw invlinebreak invlist invlpl invma invmagic invml invmodeline invmodified invmousef invmousehide invnumber invopendevice invpi invpreviewwindow invpvw invrelativenumber invrestorescreen invri invrl invro invru invsb invscb invscs invsft invshelltemp invshortname invshowfulltag invshowmode invsm invsmartindent invsmd invsol invsplitbelow invspr invssl invstartofline invswapfile invta invtagrelative invtbi invtbs invterse invtextmode invtgst invtimeout invto invtr invttybuiltin invtx invundofile invvisualbell invwarn invweirdinvert invwfw invwildignorecase invwinfixheight invwiv invwrap invwrite invwritebackup
+syn keyword vimOption contained	invai invaltkeymap invar invarabicshape invautochdir invautowrite invawa invbeval invbiosk invbl invcf invcindent invconsk invcp invcscopetag invcst invcul invcursorline invdg invea invedcompatible inveol invesckeys invexpandtab invfic invfkmap invgdefault invhidden invhkmapp invhls invic invignorecase invimc invimd invincsearch invinfercase invis invjs invlbr invlisp invloadplugins invlz invmacatsui invmh invmod invmodifiable invmore invmousefocus invnu invodev invpaste invpreserveindent invprompt invreadonly invremap invrevins invrightleft invrnu invrs invruler invsc invscrollbind invsecure invshellslash invshiftround invshowcmd invshowmatch invsi invsmartcase invsmarttab invsn invspell invsplitright invsr invsta invstmp invswf invtagbsearch invtagstack invtbidi invtermbidi invtextauto invtf invtildeop invtitle invtop invttimeout invttyfast invudf invvb invwa invwb invwfh invwic invwildmenu invwinfixwidth invwmnu invwrapscan invwriteany invws
+syn keyword vimOption contained	invakm invanti invarab invari invautoindent invautowriteall invbackup invbin invbioskey invbomb invci invcompatible invconskey invcrb invcscopeverbose invcsverb invcursorbind invdeco invdiff inveb invek invequalalways invet invexrc invfileignorecase invfoldenable invguipty invhk 
 
 " termcap codes (which can also be set) {{{2
-syn keyword vimOption contained	t_AB t_al t_bc t_ce t_cl t_Co t_cs t_Cs t_CS t_CV t_da t_db t_dl t_DL t_EI t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_fs t_IE t_IS t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_ke t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ks t_ku t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RI t_RV t_Sb t_se t_Sf t_SI t_so t_sr t_te t_ti t_ts t_ue t_us t_ut t_vb t_ve t_vi t_vs t_WP t_WS t_xs t_ZH t_ZR
-syn keyword vimOption contained	t_AF t_AL t_cd t_Ce t_cm 
+syn keyword vimOption contained	t_AB t_al t_bc t_ce t_cl t_Co t_Cs t_CS t_CV t_da t_db t_dl t_DL t_EI t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_fs t_IE t_IS t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_ke t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ks t_ku t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RI t_RV t_Sb t_se t_Sf t_SI t_so t_sr t_te t_ti t_ts t_u7 t_ue t_us t_ut t_vb t_ve t_vi t_vs t_WP t_WS t_xs t_ZH t_ZR
+syn keyword vimOption contained	t_AF t_AL t_cd t_Ce t_cm t_cs 
 syn match   vimOption contained	"t_%1"
 syn match   vimOption contained	"t_#2"
 syn match   vimOption contained	"t_#4"
@@ -62,20 +62,20 @@ syn keyword vimErrSetting contained	hard
 
 " AutoCmd Events {{{2
 syn case ignore
-syn keyword vimAutoEvent contained	BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre Cmd-event CmdwinEnter CmdwinLeave ColorScheme CursorHold CursorHoldI CursorMoved CursorMovedI EncodingChanged FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave MenuPopup QuickFixCmdPost QuickFixCmdPre RemoteReply SessionLoadPost ShellCmdPost ShellFilterPost SourceCmd SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabEnter TabLeave TermChanged TermResponse User UserGettingBored VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave 
+syn keyword vimAutoEvent contained	BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre Cmd-event CmdwinEnter CmdwinLeave ColorScheme CompleteDone CursorHold CursorHoldI CursorMoved CursorMovedI EncodingChanged FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave MenuPopup QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SessionLoadPost ShellCmdPost ShellFilterPost SourceCmd SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabEnter TabLeave TermChanged TermResponse TextChanged TextChangedI User UserGettingBored VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave 
 
 " Highlight commonly used Groupnames {{{2
 syn keyword vimGroup contained	Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo 
 
 " Default highlighting groups {{{2
-syn keyword vimHLGroup contained	ColorColumn Cursor CursorColumn CursorIM CursorLine DiffAdd DiffChange DiffDelete DiffText Directory ErrorMsg FoldColumn Folded IncSearch LineNr MatchParen Menu ModeMsg MoreMsg NonText Normal Pmenu PmenuSbar PmenuSel PmenuThumb Question Scrollbar Search SignColumn SpecialKey SpellBad SpellCap SpellLocal SpellRare StatusLine StatusLineNC TabLine TabLineFill TabLineSel Title Tooltip VertSplit Visual VisualNOS WarningMsg WildMenu 
+syn keyword vimHLGroup contained	ColorColumn Cursor CursorColumn CursorIM CursorLine CursorLineNr DiffAdd DiffChange DiffDelete DiffText Directory ErrorMsg FoldColumn Folded IncSearch LineNr MatchParen Menu ModeMsg MoreMsg NonText Normal Pmenu PmenuSbar PmenuSel PmenuThumb Question Scrollbar Search SignColumn SpecialKey SpellBad SpellCap SpellLocal SpellRare StatusLine StatusLineNC TabLine TabLineFill TabLineSel Title Tooltip VertSplit Visual VisualNOS WarningMsg WildMenu 
 syn match vimHLGroup contained	"Conceal"
 syn case match
 
 " Function Names {{{2
-syn keyword vimFuncName contained	abs and argidx atan browsedir bufloaded bufwinnr call char2nr col complete_check cos cscope_connection delete diff_hlID eval exists expr8 filereadable finddir floor fnamemodify foldlevel foreground get getchar getcmdpos getfontname getftime getloclist getpos getregtype getwinposx glob has_key histadd histnr hostname index inputlist inputsecret isdirectory join libcall line2byte log map match matchdelete matchstr mkdir nextnonblank pathshorten printf pyeval reltime remote_foreground remote_read remove repeat reverse search searchpair searchpos serverlist setcmdpos setloclist setpos setreg settabwinvar shellescape simplify sinh soundfold spellsuggest sqrt str2nr strdisplaywidth stridx strlen strridx strwidth substitute synID synIDtrans system tabpagenr tagfiles tan tempname toupper trunc undofile values visualmode wincol winline winrestcmd winsaveview writefile
-syn keyword vimFuncName contained	acos append argv atan2 bufexists bufname byte2line ceil cindent complete confirm cosh cursor did_filetype empty eventhandler exp extend filewritable findfile fmod foldclosed foldtext function getbufline getcharmod getcmdtype getfperm getftype getmatches getqflist gettabvar getwinposy globpath haslocaldir histdel hlexists iconv input inputrestore insert islocked keys libcallnr lispindent log10 maparg matchadd matchend max mode nr2char pow pumvisible range reltimestr remote_peek remote_send rename resolve round searchdecl searchpairpos server2client setbufvar setline setmatches setqflist settabvar setwinvar shiftwidth sin sort spellbadword split str2float strchars strftime string strpart strtrans submatch synconcealed synIDattr synstack tabpagebuflist tabpagewinnr taglist tanh tolower tr type undotree virtcol winbufnr winheight winnr winrestview winwidth xor
-syn keyword vimFuncName contained	add argc asin browse buflisted bufnr byteidx changenr clearmatches complete_add copy count deepcopy diff_filler escape executable expand feedkeys filter float2nr fnameescape foldclosedend foldtextresult garbagecollect getbufvar getcmdline getcwd getfsize getline getpid getreg gettabwinvar getwinvar has hasmapto histget hlID indent inputdialog inputsave invert items len line localtime luaeval mapcheck matcharg matchlist min mzeval or prevnonblank py3eval readfile remote_expr 
+syn keyword vimFuncName contained	abs and argidx atan browsedir bufloaded bufwinnr byteidxcomp changenr clearmatches complete_add copy count deepcopy diff_filler escape executable expand feedkeys filter float2nr fnameescape foldclosedend foldtextresult garbagecollect getbufvar getcmdline getcwd getfsize getline getpid getreg gettabwinvar getwinvar has hasmapto histget hlID indent inputdialog inputsave invert items len line localtime luaeval mapcheck matcharg matchlist min mzeval or prevnonblank py3eval readfile remote_expr remote_read rename reverse screenchar search searchpairpos serverlist setcmdpos setloclist setpos setreg settabwinvar sha256 shiftwidth sin sort spellbadword split str2float strchars strftime string strpart strtrans submatch synconcealed synIDattr synstack tabpagebuflist tabpagewinnr taglist tanh tolower tr type undotree virtcol wildmenumode wincol winline winrestcmd winsaveview writefile
+syn keyword vimFuncName contained	acos append argv atan2 bufexists bufname byte2line call char2nr col complete_check cos cscope_connection delete diff_hlID eval exists expr8 filereadable finddir floor fnamemodify foldlevel foreground get getchar getcmdpos getfontname getftime getloclist getpos getregtype getwinposx glob has_key histadd histnr hostname index inputlist inputsecret isdirectory join libcall line2byte log map match matchdelete matchstr mkdir nextnonblank pathshorten printf pyeval reltime remote_foreground remote_send repeat round screencol searchdecl searchpos setbufvar setline setmatches setqflist settabvar setwinvar shellescape simplify sinh soundfold spellsuggest sqrt str2nr strdisplaywidth stridx strlen strridx strwidth substitute synID synIDtrans system tabpagenr tagfiles tan tempname toupper trunc undofile values visualmode winbufnr winheight winnr winrestview winwidth xor
+syn keyword vimFuncName contained	add argc asin browse buflisted bufnr byteidx ceil cindent complete confirm cosh cursor did_filetype empty eventhandler exp extend filewritable findfile fmod foldclosed foldtext function getbufline getcharmod getcmdtype getfperm getftype getmatches getqflist gettabvar getwinposy globpath haslocaldir histdel hlexists iconv input inputrestore insert islocked keys libcallnr lispindent log10 maparg matchadd matchend max mode nr2char pow pumvisible range reltimestr remote_peek remove resolve screenattr screenrow searchpair server2client 
 
 "--- syntax here and above generated by mkvimvim ---
 " Special Vim Highlighting (not automatic) {{{1
@@ -550,31 +550,15 @@ syn region	vimGlobal	matchgroup=Statemen
 " Allows users to specify the type of embedded script highlighting
 " they want:  (perl/python/ruby/tcl support)
 "   g:vimsyn_embed == 0   : don't embed any scripts
-"   g:vimsyn_embed ~= 'l' : embed lua
-"   g:vimsyn_embed ~= 'm' : embed mzscheme
-"   g:vimsyn_embed ~= 'p' : embed perl
-"   g:vimsyn_embed ~= 'P' : embed python
-"   g:vimsyn_embed ~= 'r' : embed ruby
-"   g:vimsyn_embed ~= 't' : embed tcl
-if has("win32") || has("win95") || has("win64") || has("win16")
- " apparently has("tcl") has been hanging vim on some windows systems with cygwin
- let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
-else
- let s:trytcl= 1
-endif
+"   g:vimsyn_embed ~= 'l' : embed lua      (but only if vim supports it)
+"   g:vimsyn_embed ~= 'm' : embed mzscheme (but only if vim supports it)
+"   g:vimsyn_embed ~= 'p' : embed perl     (but only if vim supports it)
+"   g:vimsyn_embed ~= 'P' : embed python   (but only if vim supports it)
+"   g:vimsyn_embed ~= 'r' : embed ruby     (but only if vim supports it)
+"   g:vimsyn_embed ~= 't' : embed tcl      (but only if vim supports it)
 if !exists("g:vimsyn_embed")
- let g:vimsyn_embed= ""
- if has("lua")        |let g:vimsyn_embed= g:vimsyn_embed."l"|endif
- if has("mzscheme")   |let g:vimsyn_embed= g:vimsyn_embed."m"|endif
- if has("perl")       |let g:vimsyn_embed= g:vimsyn_embed."p"|endif
- if     has("python") |let g:vimsyn_embed= g:vimsyn_embed."P"
- elseif has("python3")|let g:vimsyn_embed= g:vimsyn_embed."P"|endif
- if has("ruby")       |let g:vimsyn_embed= g:vimsyn_embed."r"|endif
- if s:trytcl         
-  if has("tcl")       |let g:vimsyn_embed= g:vimsyn_embed."t"|endif
- endif
+ let g:vimsyn_embed= "lmpPr"
 endif
-unlet s:trytcl
 
 " [-- lua --] {{{3
 let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
@@ -586,7 +570,7 @@ if !filereadable(s:luapath)
   endif
  endfor
 endif
-if (g:vimsyn_embed =~ 'l') && filereadable(s:luapath)
+if (g:vimsyn_embed =~ 'l' && has("lua")) && filereadable(s:luapath)
  unlet! b:current_syntax
  exe "syn include @vimLuaScript ".s:luapath
  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'l'
@@ -613,7 +597,7 @@ if !filereadable(s:perlpath)
   endif
  endfor
 endif
-if (g:vimsyn_embed =~ 'p') && filereadable(s:perlpath)
+if (g:vimsyn_embed =~ 'p' && has("perl")) && filereadable(s:perlpath)
  unlet! b:current_syntax
  exe "syn include @vimPerlScript ".s:perlpath
  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'p'
@@ -640,7 +624,7 @@ if !filereadable(s:rubypath)
   endif
  endfor
 endif
-if (g:vimsyn_embed =~ 'r') && filereadable(s:rubypath)
+if (g:vimsyn_embed =~ 'r' && has("ruby")) && filereadable(s:rubypath)
  unlet! b:current_syntax
  exe "syn include @vimRubyScript ".s:rubypath
  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'r'
@@ -666,7 +650,7 @@ if !filereadable(s:pythonpath)
   endif
  endfor
 endif
-if g:vimsyn_embed =~ 'P' && filereadable(s:pythonpath)
+if g:vimsyn_embed =~ 'P' && (has("python") || has("python3")) && filereadable(s:pythonpath)
  unlet! b:current_syntax
  exe "syn include @vimPythonScript ".s:pythonpath
  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'P'
@@ -684,31 +668,43 @@ endif
 unlet s:pythonpath
 
 " [-- tcl --] {{{3
-let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
-if !filereadable(s:tclpath)
- for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
-  if filereadable(fnameescape(s:tclpath))
-   let s:tclpath= fnameescape(s:tclpath)
-   break
-  endif
- endfor
+if has("win32") || has("win95") || has("win64") || has("win16")
+ " apparently has("tcl") has been hanging vim on some windows systems with cygwin
+ let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
+else
+ let s:trytcl= 1
 endif
-if (g:vimsyn_embed =~ 't') && filereadable(s:tclpath)
- unlet! b:current_syntax
- exe "syn include @vimTclScript ".s:tclpath
- if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 't'
-  syn region vimTclRegion fold matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+	contains=@vimTclScript
-  syn region vimTclRegion fold matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+	contains=@vimTclScript
+if s:trytcl
+ let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
+ if !filereadable(s:tclpath)
+  for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
+   if filereadable(fnameescape(s:tclpath))
+    let s:tclpath= fnameescape(s:tclpath)
+    break
+   endif
+  endfor
+ endif
+ if (g:vimsyn_embed =~ 't' && has("tcl")) && filereadable(s:tclpath)
+  unlet! b:current_syntax
+  exe "syn include @vimTclScript ".s:tclpath
+  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 't'
+   syn region vimTclRegion fold matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+	contains=@vimTclScript
+   syn region vimTclRegion fold matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+	contains=@vimTclScript
+  else
+   syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+	contains=@vimTclScript
+   syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+		contains=@vimTclScript
+  endif
+  syn cluster vimFuncBodyList	add=vimTclScript
  else
-  syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+	contains=@vimTclScript
-  syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+		contains=@vimTclScript
+  syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
+  syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
  endif
- syn cluster vimFuncBodyList	add=vimTclScript
+ unlet s:tclpath
 else
  syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
  syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
 endif
-unlet s:tclpath
+unlet s:trytcl
 
 " [-- mzscheme --] {{{3
 let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
--- a/runtime/syntax/yacc.vim
+++ b/runtime/syntax/yacc.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Yacc
 " Maintainer:	Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Nov 14, 2012
-" Version:	10
+" Last Change:	Mar 20, 2014
+" Version:	11
 " URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Options: {{{1
@@ -42,7 +42,7 @@ exe "syn include @yaccCode ".s:Cpath
 " ---------------------------------------------------------------------
 "  Yacc Clusters: {{{1
 syn cluster yaccInitCluster	contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam,yaccParseOption
-syn cluster yaccRulesCluster	contains=yaccNonterminal,yaccString
+syn cluster yaccRulesCluster	contains=yaccNonterminal,yaccString,yaccComment
 
 " ---------------------------------------------------------------------
 "  Yacc Sections: {{{1