diff options
Diffstat (limited to 'runtime/autoload')
-rw-r--r-- | runtime/autoload/htmlcomplete.vim | 110 | ||||
-rw-r--r-- | runtime/autoload/xml/xhtml10s.vim | 32 |
2 files changed, 80 insertions, 62 deletions
diff --git a/runtime/autoload/htmlcomplete.vim b/runtime/autoload/htmlcomplete.vim index 61d2a09d9..c663e3c6b 100644 --- a/runtime/autoload/htmlcomplete.vim +++ b/runtime/autoload/htmlcomplete.vim @@ -1,7 +1,7 @@ " Vim completion script -" Language: XHTML 1.0 Strict +" Language: HTML (XHTML 1.0 Strict by default) " Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) -" Last Change: 2006 Mar 25 +" Last Change: 2006 Apr 17 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:xmldata_xhtml10s") - runtime! autoload/xml/xhtml10s.vim - "call htmlcomplete#LoadData() + if !exists("g:html_omni") + "runtime! autoload/xml/xhtml10s.vim + call htmlcomplete#LoadData() endif - let entities = g:xmldata_xhtml10s['vimxmlentities'] + let entities = g:html_omni['vimxmlentities'] if len(a:base) == 1 for m in entities @@ -443,29 +443,7 @@ function! htmlcomplete#CompleteTags(findstart, base) let attrname = matchstr(attr, '.*\ze\s*=') let entered_value = matchstr(attr, ".*=\\s*[\"']\\zs.*") let values = [] - if attrname == 'media' - let values = ["screen", "tty", "tv", "projection", "handheld", "print", "braille", "aural", "all"] - elseif attrname == 'xml:space' - let values = ["preserve"] - elseif attrname == 'shape' - let values = ["rect", "circle", "poly", "default"] - elseif attrname == 'valuetype' - let values = ["data", "ref", "object"] - elseif attrname == 'method' - let values = ["get", "post"] - elseif attrname == 'dir' - let values = ["ltr", "rtl"] - elseif attrname == 'frame' - let values = ["void", "above", "below", "hsides", "lhs", "rhs", "vsides", "box", "border"] - elseif attrname == 'rules' - let values = ["none", "groups", "rows", "all"] - elseif attrname == 'align' - let values = ["left", "center", "right", "justify", "char"] - elseif attrname == 'valign' - let values = ["top", "middle", "bottom", "baseline"] - elseif attrname == 'scope' - let values = ["row", "col", "rowgroup", "colgroup"] - elseif attrname == 'href' + if attrname == 'href' " Now we are looking for local anchors defined by name or id if entered_value =~ '^#' let file = join(getline(1, line('$')), ' ') @@ -476,18 +454,12 @@ function! htmlcomplete#CompleteTags(findstart, base) let values += ['#'.matchstr(i, "^[a-zA-Z][a-zA-Z0-9%_-]*")] endfor endif - elseif attrname == 'type' - if context =~ '^input' - let values = ["text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image", "button"] - elseif context =~ '^button' - let values = ["button", "submit", "reset"] - elseif context =~ '^style' - let values = ["text/css"] - elseif context =~ '^script' - let values = ["text/javascript"] - endif else - return [] + if has_key(g:html_omni, tag) && has_key(g:html_omni[tag][1], attrname) + let values = g:html_omni[tag][1][attrname] + else + return [] + endif endif if len(values) == 0 @@ -518,13 +490,12 @@ function! htmlcomplete#CompleteTags(findstart, base) let sbase = matchstr(context, '.*\ze\s.*') " Load data {{{ - if !exists("g:xmldata_xhtml10s") - runtime! autoload/xml/xhtml10s.vim - "call htmlcomplete#LoadData() + if !exists("g:html_omni_gen") + call htmlcomplete#LoadData() endif " }}} " - let attrs = keys(g:xmldata_xhtml10s[tag][1]) + let attrs = keys(g:html_omni[tag][1]) for m in sort(attrs) if m =~ '^'.attr @@ -534,13 +505,13 @@ function! htmlcomplete#CompleteTags(findstart, base) endif endfor let menu = res + res2 - if has_key(g:xmldata_xhtml10s, 'vimxmlattrinfo') + if has_key(g:html_omni, 'vimxmlattrinfo') let final_menu = [] for i in range(len(menu)) let item = menu[i] - if has_key(g:xmldata_xhtml10s['vimxmlattrinfo'], item) - let m_menu = g:xmldata_xhtml10s['vimxmlattrinfo'][item][0] - let m_info = g:xmldata_xhtml10s['vimxmlattrinfo'][item][1] + 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 m_menu !~ 'Bool' let item .= '="' endif @@ -569,9 +540,9 @@ function! htmlcomplete#CompleteTags(findstart, base) endif endif " Load data {{{ - if !exists("g:xmldata_xhtml10s") - runtime! autoload/xml/xhtml10s.vim - "call htmlcomplete#LoadData() + if !exists("g:html_omni") + "runtime! autoload/xml/xhtml10s.vim + call htmlcomplete#LoadData() endif " }}} " Tag completion {{{ @@ -580,15 +551,15 @@ function! htmlcomplete#CompleteTags(findstart, base) " MM: TODO: GLOT works always the same but with some weird situation it " behaves as intended in HTML but screws in PHP let g:ot = opentag - if opentag == '' || &ft == 'php' && !has_key(g:xmldata_xhtml10s, opentag) + if opentag == '' || &ft == 'php' && !has_key(g: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:xmldata_xhtml10s) + let tags = keys(g:html_omni) call filter(tags, 'v:val !~ "^vimxml"') else - let tags = g:xmldata_xhtml10s[opentag][0] + let tags = g:html_omni[opentag][0] endif " }}} @@ -600,13 +571,13 @@ function! htmlcomplete#CompleteTags(findstart, base) endif endfor let menu = res + res2 - if has_key(g:xmldata_xhtml10s, 'vimxmltaginfo') + if has_key(g:html_omni, 'vimxmltaginfo') let final_menu = [] for i in range(len(menu)) let item = menu[i] - if has_key(g:xmldata_xhtml10s['vimxmltaginfo'], item) - let m_menu = g:xmldata_xhtml10s['vimxmltaginfo'][item][0] - let m_info = g:xmldata_xhtml10s['vimxmltaginfo'][item][1] + 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] else let m_menu = '' let m_info = '' @@ -621,4 +592,27 @@ function! htmlcomplete#CompleteTags(findstart, base) " }}} endif endfunction + +function! htmlcomplete#LoadData() " {{{ + if !exists("g:html_omni_flavor") + let g:html_omni_flavor = 'xhtml10s' + 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 + " 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 + 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: diff --git a/runtime/autoload/xml/xhtml10s.vim b/runtime/autoload/xml/xhtml10s.vim index 1d15cef15..2fe68cdd2 100644 --- a/runtime/autoload/xml/xhtml10s.vim +++ b/runtime/autoload/xml/xhtml10s.vim @@ -1460,9 +1460,21 @@ let g:xmldata_xhtml10s = { \ 'style' : [[], \ { \ 'lang' : [], -\ 'media' : [], +\ 'media' : [ +\ 'screen', +\ 'tty', +\ 'tv', +\ 'projection', +\ 'handheld', +\ 'print', +\ 'braille', +\ 'aural', +\ 'all' +\ ], \ 'title' : [], -\ 'type' : [], +\ 'type' : [ +\ 'text/css' +\ ], \ 'xml:space' : [ \ 'preserve' \ ], @@ -3342,7 +3354,17 @@ let g:xmldata_xhtml10s = { \ ], \ 'onkeydown' : [], \ 'onkeyup' : [], -\ 'media' : [], +\ 'media' : [ +\ 'screen', +\ 'tty', +\ 'tv', +\ 'projection', +\ 'handheld', +\ 'print', +\ 'braille', +\ 'aural', +\ 'all' +\ ], \ 'href' : [], \ 'onmouseup' : [], \ 'id' : [], @@ -3369,7 +3391,9 @@ let g:xmldata_xhtml10s = { \ 'BOOL' \ ], \ 'src' : [], -\ 'type' : [], +\ 'type' : [ +\ 'text/javascript' +\ ], \ 'charset' : [], \ 'xml:space' : [ \ 'preserve' |