diff options
Diffstat (limited to 'runtime/autoload/htmlcomplete.vim')
-rw-r--r-- | runtime/autoload/htmlcomplete.vim | 91 |
1 files changed, 54 insertions, 37 deletions
diff --git a/runtime/autoload/htmlcomplete.vim b/runtime/autoload/htmlcomplete.vim index e307698a2..248426801 100644 --- a/runtime/autoload/htmlcomplete.vim +++ b/runtime/autoload/htmlcomplete.vim @@ -1,7 +1,7 @@ " Vim completion script -" Language: HTML (XHTML 1.0 Strict by default) +" Language: HTML and XHTML " Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) -" Last Change: 2006 Apr 17 +" Last Change: 2006 Apr 20 function! htmlcomplete#CompleteTags(findstart, base) if a:findstart @@ -159,12 +159,12 @@ function! htmlcomplete#CompleteTags(findstart, base) if exists("b:entitiescompl") unlet! b:entitiescompl - if !exists("g:html_omni") + if !exists("b:html_omni") "runtime! autoload/xml/xhtml10s.vim call htmlcomplete#LoadData() endif - let entities = g:html_omni['vimxmlentities'] + let entities = b:html_omni['vimxmlentities'] if len(a:base) == 1 for m in entities @@ -462,8 +462,8 @@ function! htmlcomplete#CompleteTags(findstart, base) endfor endif else - if has_key(g:html_omni, tag) && has_key(g:html_omni[tag][1], attrname) - let values = g:html_omni[tag][1][attrname] + if has_key(b:html_omni, tag) && has_key(b:html_omni[tag][1], attrname) + let values = b:html_omni[tag][1][attrname] else return [] endif @@ -503,13 +503,13 @@ function! htmlcomplete#CompleteTags(findstart, base) let sbase = matchstr(context, '.*\ze\s.*') " Load data {{{ - if !exists("g:html_omni_gen") + if !exists("b:html_omni_gen") call htmlcomplete#LoadData() endif " }}} - if has_key(g:html_omni, tag) - let attrs = keys(g:html_omni[tag][1]) + if has_key(b:html_omni, tag) + let attrs = keys(b:html_omni[tag][1]) else return [] endif @@ -522,13 +522,13 @@ function! htmlcomplete#CompleteTags(findstart, base) endif endfor let menu = res + res2 - if has_key(g:html_omni, 'vimxmlattrinfo') + if has_key(b:html_omni, 'vimxmlattrinfo') let final_menu = [] for i in range(len(menu)) let item = menu[i] - if has_key(g:html_omni['vimxmlattrinfo'], item) - let m_menu = g:html_omni['vimxmlattrinfo'][item][0] - let m_info = g:html_omni['vimxmlattrinfo'][item][1] + if has_key(b:html_omni['vimxmlattrinfo'], item) + let m_menu = b:html_omni['vimxmlattrinfo'][item][0] + let m_info = b:html_omni['vimxmlattrinfo'][item][1] if m_menu !~ 'Bool' let item .= '="' endif @@ -558,7 +558,7 @@ function! htmlcomplete#CompleteTags(findstart, base) endif " }}} " Load data {{{ - if !exists("g:html_omni") + if !exists("b:html_omni") "runtime! autoload/xml/xhtml10s.vim call htmlcomplete#LoadData() endif @@ -568,16 +568,16 @@ function! htmlcomplete#CompleteTags(findstart, base) let opentag = tolower(xmlcomplete#GetLastOpenTag("b:unaryTagsStack")) " MM: TODO: GLOT works always the same but with some weird situation it " behaves as intended in HTML but screws in PHP - if opentag == '' || &ft == 'php' && !has_key(g:html_omni, opentag) + if opentag == '' || &ft == 'php' && !has_key(b:html_omni, opentag) " Hack for sometimes failing GetLastOpenTag. " As far as I tested fail isn't GLOT fault but problem " of invalid document - not properly closed tags and other mish-mash. " Also when document is empty. Return list of *all* tags. - let tags = keys(g:html_omni) + let tags = keys(b:html_omni) call filter(tags, 'v:val !~ "^vimxml"') else - if has_key(g:html_omni, opentag) - let tags = g:html_omni[opentag][0] + if has_key(b:html_omni, opentag) + let tags = b:html_omni[opentag][0] else return [] endif @@ -596,17 +596,20 @@ function! htmlcomplete#CompleteTags(findstart, base) endif endfor let menu = res + res2 - if has_key(g:html_omni, 'vimxmltaginfo') + if has_key(b:html_omni, 'vimxmltaginfo') let final_menu = [] for i in range(len(menu)) let item = menu[i] - if has_key(g:html_omni['vimxmltaginfo'], item) - let m_menu = g:html_omni['vimxmltaginfo'][item][0] - let m_info = g:html_omni['vimxmltaginfo'][item][1] + if has_key(b:html_omni['vimxmltaginfo'], item) + let m_menu = b:html_omni['vimxmltaginfo'][item][0] + let m_info = b:html_omni['vimxmltaginfo'][item][1] else let m_menu = '' let m_info = '' endif + if &ft == 'html' && exists("uppercase_tag") && uppercase_tag == 1 + let item = toupper(item) + endif let final_menu += [{'word':item, 'menu':m_menu, 'info':m_info}] endfor else @@ -619,25 +622,39 @@ function! htmlcomplete#CompleteTags(findstart, base) endfunction function! htmlcomplete#LoadData() " {{{ - if !exists("g:html_omni_flavor") - let g:html_omni_flavor = 'xhtml10s' + if !exists("b:html_omni_flavor") + if &ft == 'html' + let b:html_omni_flavor = 'html401t' + else + let b:html_omni_flavor = 'xhtml10s' + endif endif - exe 'runtime! autoload/xml/'.g:html_omni_flavor.'.vim' - " This one is necessary because we don't know if - " g:html_omni_flavor file exists and was sourced + " With that if we still have bloated memory but create new buffer + " variables only by linking to existing g:variable, not sourcing whole + " file. + if exists('g:xmldata_'.b:html_omni_flavor) + exe 'let b:html_omni = g:xmldata_'.b:html_omni_flavor + else + exe 'runtime! autoload/xml/'.b:html_omni_flavor.'.vim' + exe 'let b:html_omni = g:xmldata_'.b:html_omni_flavor + endif + " This repetition is necessary because we don't know if + " b:html_omni_flavor file exists and was sourced " Proper checking for files would require iterating through 'rtp' " and could introduce OS dependent mess. - if !exists("g:xmldata_".g:html_omni_flavor) - let g:html_omni_flavor = 'xhtml10s' - runtime! autoload/xml/xhtml10s.vim + if !exists("g:xmldata_".b:html_omni_flavor) + if &ft == 'html' + let b:html_omni_flavor = 'html401t' + else + let b:html_omni_flavor = 'xhtml10s' + endif + endif + if exists('g:xmldata_'.b:html_omni_flavor) + exe 'let b:html_omni = g:xmldata_'.b:html_omni_flavor + else + exe 'runtime! autoload/xml/'.b:html_omni_flavor.'.vim' + exe 'let b:html_omni = g:xmldata_'.b:html_omni_flavor endif - - exe 'let g:html_omni = g:xmldata_'.g:html_omni_flavor - - " Free some memory - exe 'unlet! g:xmldata_'.g:html_omni_flavor - - "call htmlcomplete#LoadData() endfunction " }}} " vim:set foldmethod=marker: |