annotate runtime/autoload/htmlcomplete.vim @ 830:927afe5f3c9d

updated for version 7.0d05
author vimboss
date Sat, 15 Apr 2006 20:16:09 +0000
parents dc8197342755
children 5a7843c57316
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
1 " Vim completion script
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
2 " Language: XHTML 1.0 Strict
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
3 " Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
810
9f345c48220b updated for version 7.0c
vimboss
parents: 784
diff changeset
4 " Last Change: 2006 Mar 25
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
5
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
6 function! htmlcomplete#CompleteTags(findstart, base)
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
7 if a:findstart
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
8 " locate the start of the word
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
9 let line = getline('.')
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
10 let start = col('.') - 1
643
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
11 let curline = line('.')
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
12 let compl_begin = col('.') - 2
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
13 while start >= 0 && line[start - 1] =~ '\(\k\|[:.-]\)'
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
14 let start -= 1
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
15 endwhile
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
16 " Handling of entities {{{
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
17 if start >= 0 && line[start - 1] =~ '&'
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
18 let b:entitiescompl = 1
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
19 let b:compl_context = ''
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
20 return start
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
21 endif
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
22 " }}}
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
23 " Handling of <style> tag {{{
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
24 let stylestart = searchpair('<style\>', '', '<\/style\>', "bnW")
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
25 let styleend = searchpair('<style\>', '', '<\/style\>', "nW")
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
26 if stylestart != 0 && styleend != 0
643
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
27 if stylestart <= curline && styleend >= curline
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
28 let start = col('.') - 1
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
29 let b:csscompl = 1
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
30 while start >= 0 && line[start - 1] =~ '\(\k\|-\)'
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
31 let start -= 1
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
32 endwhile
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
33 endif
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
34 endif
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
35 " }}}
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
36 " Handling of <script> tag {{{
649
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
37 let scriptstart = searchpair('<script\>', '', '<\/script\>', "bnW")
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
38 let scriptend = searchpair('<script\>', '', '<\/script\>', "nW")
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
39 if scriptstart != 0 && scriptend != 0
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
40 if scriptstart <= curline && scriptend >= curline
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
41 let start = col('.') - 1
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
42 let b:jscompl = 1
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
43 let b:jsrange = [scriptstart, scriptend]
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
44 while start >= 0 && line[start - 1] =~ '\k'
649
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
45 let start -= 1
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
46 endwhile
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
47 " We are inside of <script> tag. But we should also get contents
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
48 " of all linked external files and (secondary, less probably) other <script> tags
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
49 " This logic could possible be done in separate function - may be
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
50 " reused in events scripting (also with option could be reused for
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
51 " CSS
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
52 let b:js_extfiles = []
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
53 let l = line('.')
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
54 let c = col('.')
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
55 call cursor(1,1)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
56 while search('<\@<=script\>', 'W') && line('.') <= l
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
57 if synIDattr(synID(line('.'),col('.')-1,0),"name") !~? 'comment'
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
58 let sname = matchstr(getline('.'), '<script[^>]*src\s*=\s*\([''"]\)\zs.\{-}\ze\1')
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
59 if filereadable(sname)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
60 let b:js_extfiles += readfile(sname)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
61 endif
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
62 endif
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
63 endwhile
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
64 call cursor(1,1)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
65 let js_scripttags = []
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
66 while search('<script\>', 'W') && line('.') < l
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
67 if matchstr(getline('.'), '<script[^>]*src') == ''
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
68 let js_scripttag = getline(line('.'), search('</script>', 'W'))
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
69 let js_scripttags += js_scripttag
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
70 endif
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
71 endwhile
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
72 let b:js_extfiles += js_scripttags
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
73 call cursor(l,c)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
74 unlet! l c
649
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
75 endif
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
76 endif
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
77 " }}}
649
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
78 if !exists("b:csscompl") && !exists("b:jscompl")
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
79 let b:compl_context = getline('.')[0:(compl_begin)]
643
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
80 if b:compl_context !~ '<[^>]*$'
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
81 " Look like we may have broken tag. Check previous lines.
643
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
82 let i = 1
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
83 while 1
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
84 let context_line = getline(curline-i)
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
85 if context_line =~ '<[^>]*$'
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
86 " Yep, this is this line
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
87 let context_lines = getline(curline-i, curline)
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
88 let b:compl_context = join(context_lines, ' ')
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
89 break
784
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
90 elseif context_line =~ '>[^<]*$' || i == curline
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
91 " We are in normal tag line, no need for completion at all
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
92 " OR reached first line without tag at all
643
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
93 let b:compl_context = ''
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
94 break
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
95 endif
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
96 let i += 1
784
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
97 " We reached first line and no tag approached
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
98 " Prevents endless loop
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
99 "if i > curline
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
100 "let b:compl_context = ''
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
101 "break
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
102 "endif
643
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
103 endwhile
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
104 " Make sure we don't have counter
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
105 unlet! i
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 641
diff changeset
106 endif
641
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
107 let b:compl_context = matchstr(b:compl_context, '.*\zs<.*')
784
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
108
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
109 " Return proper start for on-events. Without that beginning of
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
110 " completion will be badly reported
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
111 if b:compl_context =~? 'on[a-z]*\s*=\s*\(''[^'']*\|"[^"]*\)$'
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
112 let start = col('.') - 1
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
113 while start >= 0 && line[start - 1] =~ '\k'
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
114 let start -= 1
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
115 endwhile
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
116 endif
784
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
117 " If b:compl_context begins with <? we are inside of PHP code. It
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
118 " wasn't closed so PHP completion passed it to HTML
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
119 if &filetype =~? 'php' && b:compl_context =~ '^<?'
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
120 let b:phpcompl = 1
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
121 let start = col('.') - 1
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
122 while start >= 0 && line[start - 1] =~ '[a-zA-Z_0-9\x7f-\xff$]'
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
123 let start -= 1
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
124 endwhile
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
125 endif
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
126 else
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
127 let b:compl_context = getline('.')[0:compl_begin]
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
128 endif
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
129 return start
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
130 else
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
131 " Initialize base return lists
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
132 let res = []
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
133 let res2 = []
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
134 " a:base is very short - we need context
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
135 let context = b:compl_context
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
136 " Check if we should do CSS completion inside of <style> tag
784
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
137 " or JS completion inside of <script> tag or PHP completion in case of <?
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
138 " tag AND &ft==php
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
139 if exists("b:csscompl")
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
140 unlet! b:csscompl
641
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
141 let context = b:compl_context
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
142 unlet! b:compl_context
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
143 return csscomplete#CompleteCSS(0, context)
649
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
144 elseif exists("b:jscompl")
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
145 unlet! b:jscompl
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
146 return javascriptcomplete#CompleteJS(0, a:base)
784
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
147 elseif exists("b:phpcompl")
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
148 unlet! b:phpcompl
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
149 let context = b:compl_context
1cc5f2c523ee updated for version 7.0229
vimboss
parents: 714
diff changeset
150 return phpcomplete#CompletePHP(0, a:base)
641
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
151 else
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
152 if len(b:compl_context) == 0 && !exists("b:entitiescompl")
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
153 return []
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
154 endif
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
155 let context = matchstr(b:compl_context, '.\zs.*')
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
156 endif
641
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
157 unlet! b:compl_context
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
158 " Entities completion {{{
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
159 if exists("b:entitiescompl")
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
160 unlet! b:entitiescompl
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
161
557
862863033fdd updated for version 7.0158
vimboss
parents: 553
diff changeset
162 if !exists("g:xmldata_xhtml10s")
829
dc8197342755 updated for version 7.0d04
vimboss
parents: 810
diff changeset
163 runtime! autoload/xml/xhtml10s.vim
dc8197342755 updated for version 7.0d04
vimboss
parents: 810
diff changeset
164 "call htmlcomplete#LoadData()
557
862863033fdd updated for version 7.0158
vimboss
parents: 553
diff changeset
165 endif
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
166
557
862863033fdd updated for version 7.0158
vimboss
parents: 553
diff changeset
167 let entities = g:xmldata_xhtml10s['vimxmlentities']
862863033fdd updated for version 7.0158
vimboss
parents: 553
diff changeset
168
641
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
169 if len(a:base) == 1
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
170 for m in entities
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
171 if m =~ '^'.a:base
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
172 call add(res, m.';')
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
173 endif
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
174 endfor
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
175 return res
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
176 else
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
177 for m in entities
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
178 if m =~? '^'.a:base
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
179 call add(res, m.';')
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
180 elseif m =~? a:base
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
181 call add(res2, m.';')
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
182 endif
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
183 endfor
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
184
641
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
185 return res + res2
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
186 endif
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
187
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
188
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
189 endif
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
190 " }}}
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
191 if context =~ '>'
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
192 " Generally if context contains > it means we are outside of tag and
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
193 " should abandon action - with one exception: <style> span { bo
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
194 if context =~ 'style[^>]\{-}>[^<]\{-}$'
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
195 return csscomplete#CompleteCSS(0, context)
649
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
196 elseif context =~ 'script[^>]\{-}>[^<]\{-}$'
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
197 let b:jsrange = [line('.'), search('<\/script\>', 'nW')]
8157079cea85 updated for version 7.0191
vimboss
parents: 643
diff changeset
198 return javascriptcomplete#CompleteJS(0, context)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
199 else
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
200 return []
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
201 endif
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
202 endif
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
203
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
204 " If context contains > it means we are already outside of tag and we
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
205 " should abandon action
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
206 " If context contains white space it is attribute.
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
207 " It can be also value of attribute.
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
208 " We have to get first word to offer proper completions
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
209 if context == ''
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
210 let tag = ''
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
211 else
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
212 let tag = split(context)[0]
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
213 endif
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
214 " Get last word, it should be attr name
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
215 let attr = matchstr(context, '.*\s\zs.*')
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
216 " Possible situations where any prediction would be difficult:
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
217 " 1. Events attributes
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
218 if context =~ '\s'
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
219 " Sort out style, class, and on* cases
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
220 if context =~? "\\(on[a-z]*\\|id\\|style\\|class\\)\\s*=\\s*[\"']"
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
221 " Id, class completion {{{
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
222 if context =~? "\\(id\\|class\\)\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
223 if context =~? "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
224 let search_for = "class"
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
225 elseif context =~? "id\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
226 let search_for = "id"
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
227 endif
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
228 " Handle class name completion
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
229 " 1. Find lines of <link stylesheet>
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
230 " 1a. Check file for @import
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
231 " 2. Extract filename(s?) of stylesheet,
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
232 call cursor(1,1)
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
233 let head = getline(search('<head\>'), search('<\/head>'))
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
234 let headjoined = join(copy(head), ' ')
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
235 if headjoined =~ '<style'
557
862863033fdd updated for version 7.0158
vimboss
parents: 553
diff changeset
236 " Remove possibly confusing CSS operators
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
237 let stylehead = substitute(headjoined, '+>\*[,', ' ', 'g')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
238 if search_for == 'class'
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
239 let styleheadlines = split(stylehead)
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
240 let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
241 else
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
242 let stylesheet = split(headjoined, '[{}]')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
243 " Get all lines which fit id syntax
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
244 let classlines = filter(copy(stylesheet), "v:val =~ '#[a-zA-Z0-9_-]\\+'")
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
245 " Filter out possible color definitions
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
246 call filter(classlines, "v:val !~ ':\\s*#[a-zA-Z0-9_-]\\+'")
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
247 " Filter out complex border definitions
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
248 call filter(classlines, "v:val !~ '\\(none\\|hidden\\|dotted\\|dashed\\|solid\\|double\\|groove\\|ridge\\|inset\\|outset\\)\\s*#[a-zA-Z0-9_-]\\+'")
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
249 let templines = join(classlines, ' ')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
250 let headclasslines = split(templines)
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
251 call filter(headclasslines, "v:val =~ '#[a-zA-Z0-9_-]\\+'")
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
252 endif
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
253 let internal = 1
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
254 else
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
255 let internal = 0
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
256 endif
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
257 let styletable = []
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
258 let secimportfiles = []
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
259 let filestable = filter(copy(head), "v:val =~ '\\(@import\\|link.*stylesheet\\)'")
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
260 for line in filestable
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
261 if line =~ "@import"
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
262 let styletable += [matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")]
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
263 elseif line =~ "<link"
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
264 let styletable += [matchstr(line, "href\\s*=\\s*[\"']\\zs\\f\\+\\ze")]
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
265 endif
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
266 endfor
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
267 for file in styletable
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
268 if filereadable(file)
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
269 let stylesheet = readfile(file)
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
270 let secimport = filter(copy(stylesheet), "v:val =~ '@import'")
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
271 if len(secimport) > 0
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
272 for line in secimport
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
273 let secfile = matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
274 let secfile = fnamemodify(file, ":p:h").'/'.secfile
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
275 let secimportfiles += [secfile]
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
276 endfor
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
277 endif
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
278 endif
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
279 endfor
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
280 let cssfiles = styletable + secimportfiles
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
281 let classes = []
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
282 for file in cssfiles
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
283 if filereadable(file)
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
284 let stylesheet = readfile(file)
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
285 let stylefile = join(stylesheet, ' ')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
286 let stylefile = substitute(stylefile, '+>\*[,', ' ', 'g')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
287 if search_for == 'class'
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
288 let stylesheet = split(stylefile)
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
289 let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
290 else
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
291 let stylesheet = split(stylefile, '[{}]')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
292 " Get all lines which fit id syntax
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
293 let classlines = filter(copy(stylesheet), "v:val =~ '#[a-zA-Z0-9_-]\\+'")
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
294 " Filter out possible color definitions
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
295 call filter(classlines, "v:val !~ ':\\s*#[a-zA-Z0-9_-]\\+'")
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
296 " Filter out complex border definitions
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
297 call filter(classlines, "v:val !~ '\\(none\\|hidden\\|dotted\\|dashed\\|solid\\|double\\|groove\\|ridge\\|inset\\|outset\\)\\s*#[a-zA-Z0-9_-]\\+'")
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
298 let templines = join(classlines, ' ')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
299 let stylelines = split(templines)
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
300 let classlines = filter(stylelines, "v:val =~ '#[a-zA-Z0-9_-]\\+'")
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
301
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
302 endif
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
303 endif
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
304 " We gathered classes definitions from all external files
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
305 let classes += classlines
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
306 endfor
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
307 if internal == 1
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
308 let classes += headclasslines
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
309 endif
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
310
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
311 if search_for == 'class'
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
312 let elements = {}
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
313 for element in classes
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
314 if element =~ '^\.'
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
315 let class = matchstr(element, '^\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
316 let class = substitute(class, ':.*', '', '')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
317 if has_key(elements, 'common')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
318 let elements['common'] .= ' '.class
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
319 else
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
320 let elements['common'] = class
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
321 endif
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
322 else
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
323 let class = matchstr(element, '[a-zA-Z1-6]*\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
324 let tagname = tolower(matchstr(element, '[a-zA-Z1-6]*\ze.'))
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
325 if tagname != ''
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
326 if has_key(elements, tagname)
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
327 let elements[tagname] .= ' '.class
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
328 else
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
329 let elements[tagname] = class
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
330 endif
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
331 endif
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
332 endif
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
333 endfor
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
334
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
335 if has_key(elements, tag) && has_key(elements, 'common')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
336 let values = split(elements[tag]." ".elements['common'])
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
337 elseif has_key(elements, tag) && !has_key(elements, 'common')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
338 let values = split(elements[tag])
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
339 elseif !has_key(elements, tag) && has_key(elements, 'common')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
340 let values = split(elements['common'])
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
341 else
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
342 return []
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
343 endif
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
344
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
345 elseif search_for == 'id'
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
346 " Find used IDs
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
347 " 1. Catch whole file
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
348 let filelines = getline(1, line('$'))
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
349 " 2. Find lines with possible id
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
350 let used_id_lines = filter(filelines, 'v:val =~ "id\\s*=\\s*[\"''][a-zA-Z0-9_-]\\+"')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
351 " 3a. Join all filtered lines
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
352 let id_string = join(used_id_lines, ' ')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
353 " 3b. And split them to be sure each id is in separate item
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
354 let id_list = split(id_string, 'id\s*=\s*')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
355 " 4. Extract id values
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
356 let used_id = map(id_list, 'matchstr(v:val, "[\"'']\\zs[a-zA-Z0-9_-]\\+\\ze")')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
357 let joined_used_id = ','.join(used_id, ',').','
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
358
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
359 let allvalues = map(classes, 'matchstr(v:val, ".*#\\zs[a-zA-Z0-9_-]\\+")')
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
360
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
361 let values = []
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
362
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
363 for element in classes
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
364 if joined_used_id !~ ','.element.','
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
365 let values += [element]
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
366 endif
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
367
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
368 endfor
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
369
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
370 endif
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
371
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
372 " We need special version of sbase
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
373 let classbase = matchstr(context, ".*[\"']")
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
374 let classquote = matchstr(classbase, '.$')
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
375
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
376 let entered_class = matchstr(attr, ".*=\\s*[\"']\\zs.*")
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
377
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
378 for m in sort(values)
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
379 if m =~? '^'.entered_class
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
380 call add(res, m . classquote)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
381 elseif m =~? entered_class
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
382 call add(res2, m . classquote)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
383 endif
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
384 endfor
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
385
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
386 return res + res2
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
387
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
388 elseif context =~? "style\\s*=\\s*[\"'][^\"']*$"
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
389 return csscomplete#CompleteCSS(0, context)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
390
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
391 endif
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
392 " }}}
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
393 " Complete on-events {{{
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
394 if context =~? 'on[a-z]*\s*=\s*\(''[^'']*\|"[^"]*\)$'
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
395 " We have to:
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
396 " 1. Find external files
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
397 let b:js_extfiles = []
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
398 let l = line('.')
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
399 let c = col('.')
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
400 call cursor(1,1)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
401 while search('<\@<=script\>', 'W') && line('.') <= l
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
402 if synIDattr(synID(line('.'),col('.')-1,0),"name") !~? 'comment'
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
403 let sname = matchstr(getline('.'), '<script[^>]*src\s*=\s*\([''"]\)\zs.\{-}\ze\1')
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
404 if filereadable(sname)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
405 let b:js_extfiles += readfile(sname)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
406 endif
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
407 endif
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
408 endwhile
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
409 " 2. Find at least one <script> tag
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
410 call cursor(1,1)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
411 let js_scripttags = []
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
412 while search('<script\>', 'W') && line('.') < l
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
413 if matchstr(getline('.'), '<script[^>]*src') == ''
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
414 let js_scripttag = getline(line('.'), search('</script>', 'W'))
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
415 let js_scripttags += js_scripttag
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
416 endif
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
417 endwhile
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
418 let b:js_extfiles += js_scripttags
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
419
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
420 " 3. Proper call for javascriptcomplete#CompleteJS
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
421 call cursor(l,c)
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
422 let js_context = matchstr(a:base, '\k\+$')
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
423 let js_shortcontext = substitute(a:base, js_context.'$', '', '')
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
424 let b:compl_context = context
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
425 let b:jsrange = [l, l]
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
426 unlet! l c
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
427 return javascriptcomplete#CompleteJS(0, js_context)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
428
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
429 endif
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
430
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
431 " }}}
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
432 let stripbase = matchstr(context, ".*\\(on[a-zA-Z]*\\|style\\|class\\)\\s*=\\s*[\"']\\zs.*")
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
433 " Now we have context stripped from all chars up to style/class.
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
434 " It may fail with some strange style value combinations.
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
435 if stripbase !~ "[\"']"
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
436 return []
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
437 endif
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
438 endif
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
439 " Value of attribute completion {{{
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
440 " If attr contains =\s*[\"'] we catched value of attribute
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
441 if attr =~ "=\s*[\"']"
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
442 " Let do attribute specific completion
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
443 let attrname = matchstr(attr, '.*\ze\s*=')
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
444 let entered_value = matchstr(attr, ".*=\\s*[\"']\\zs.*")
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
445 let values = []
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
446 if attrname == 'media'
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
447 let values = ["screen", "tty", "tv", "projection", "handheld", "print", "braille", "aural", "all"]
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
448 elseif attrname == 'xml:space'
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
449 let values = ["preserve"]
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
450 elseif attrname == 'shape'
553
249173daa651 updated for version 7.0157
vimboss
parents: 548
diff changeset
451 let values = ["rect", "circle", "poly", "default"]
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
452 elseif attrname == 'valuetype'
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
453 let values = ["data", "ref", "object"]
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
454 elseif attrname == 'method'
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
455 let values = ["get", "post"]
525
1f8d8c37d6ec updated for version 7.0147
vimboss
parents: 523
diff changeset
456 elseif attrname == 'dir'
1f8d8c37d6ec updated for version 7.0147
vimboss
parents: 523
diff changeset
457 let values = ["ltr", "rtl"]
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
458 elseif attrname == 'frame'
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
459 let values = ["void", "above", "below", "hsides", "lhs", "rhs", "vsides", "box", "border"]
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
460 elseif attrname == 'rules'
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
461 let values = ["none", "groups", "rows", "all"]
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
462 elseif attrname == 'align'
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
463 let values = ["left", "center", "right", "justify", "char"]
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
464 elseif attrname == 'valign'
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
465 let values = ["top", "middle", "bottom", "baseline"]
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
466 elseif attrname == 'scope'
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
467 let values = ["row", "col", "rowgroup", "colgroup"]
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
468 elseif attrname == 'href'
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
469 " Now we are looking for local anchors defined by name or id
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
470 if entered_value =~ '^#'
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
471 let file = join(getline(1, line('$')), ' ')
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
472 " Split it be sure there will be one id/name element in
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
473 " item, it will be also first word [a-zA-Z0-9_-] in element
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
474 let oneelement = split(file, "\\(meta \\)\\@<!\\(name\\|id\\)\\s*=\\s*[\"']")
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
475 for i in oneelement
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
476 let values += ['#'.matchstr(i, "^[a-zA-Z][a-zA-Z0-9%_-]*")]
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
477 endfor
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
478 endif
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
479 elseif attrname == 'type'
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
480 if context =~ '^input'
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
481 let values = ["text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image", "button"]
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
482 elseif context =~ '^button'
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
483 let values = ["button", "submit", "reset"]
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
484 elseif context =~ '^style'
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
485 let values = ["text/css"]
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
486 elseif context =~ '^script'
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
487 let values = ["text/javascript"]
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
488 endif
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
489 else
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
490 return []
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
491 endif
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
492
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
493 if len(values) == 0
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
494 return []
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
495 endif
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
496
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
497 " We need special version of sbase
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
498 let attrbase = matchstr(context, ".*[\"']")
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
499 let attrquote = matchstr(attrbase, '.$')
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
500
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
501 for m in values
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
502 " This if is needed to not offer all completions as-is
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
503 " alphabetically but sort them. Those beginning with entered
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
504 " part will be as first choices
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
505 if m =~ '^'.entered_value
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
506 call add(res, m . attrquote.' ')
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
507 elseif m =~ entered_value
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
508 call add(res2, m . attrquote.' ')
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
509 endif
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
510 endfor
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
511
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
512 return res + res2
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
513
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
514 endif
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
515 " }}}
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
516 " Attribute completion {{{
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
517 " Shorten context to not include last word
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
518 let sbase = matchstr(context, '.*\ze\s.*')
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
519
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
520 " Load data {{{
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
521 if !exists("g:xmldata_xhtml10s")
829
dc8197342755 updated for version 7.0d04
vimboss
parents: 810
diff changeset
522 runtime! autoload/xml/xhtml10s.vim
dc8197342755 updated for version 7.0d04
vimboss
parents: 810
diff changeset
523 "call htmlcomplete#LoadData()
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
524 endif
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
525 " }}}
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
526 "
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
527 let attrs = keys(g:xmldata_xhtml10s[tag][1])
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
528
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
529 for m in sort(attrs)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
530 if m =~ '^'.attr
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
531 call add(res, m)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
532 elseif m =~ attr
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
533 call add(res2, m)
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
534 endif
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
535 endfor
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
536 let menu = res + res2
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
537 if has_key(g:xmldata_xhtml10s, 'vimxmlattrinfo')
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
538 let final_menu = []
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
539 for i in range(len(menu))
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
540 let item = menu[i]
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
541 if has_key(g:xmldata_xhtml10s['vimxmlattrinfo'], item)
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
542 let m_menu = g:xmldata_xhtml10s['vimxmlattrinfo'][item][0]
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
543 let m_info = g:xmldata_xhtml10s['vimxmlattrinfo'][item][1]
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
544 if m_menu !~ 'Bool'
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
545 let item .= '="'
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
546 endif
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
547 else
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
548 let m_menu = ''
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
549 let m_info = ''
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
550 let item .= '="'
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
551 endif
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
552 let final_menu += [{'word':item, 'menu':m_menu, 'info':m_info}]
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
553 endfor
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
554 else
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
555 let final_menu = map(menu, 'v:val."=\""')
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
556 endif
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
557 return final_menu
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
558
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
559 endif
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
560 " }}}
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
561 " Close tag {{{
529
0d6092bb72e6 updated for version 7.0148
vimboss
parents: 525
diff changeset
562 let b:unaryTagsStack = "base meta link hr br param img area input col"
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
563 if context =~ '^\/'
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 674
diff changeset
564 if context =~ '^\/.'
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 674
diff changeset
565 return []
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 674
diff changeset
566 else
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 674
diff changeset
567 let opentag = xmlcomplete#GetLastOpenTag("b:unaryTagsStack")
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 674
diff changeset
568 return [opentag.">"]
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 674
diff changeset
569 endif
525
1f8d8c37d6ec updated for version 7.0147
vimboss
parents: 523
diff changeset
570 endif
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 667
diff changeset
571 " Load data {{{
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 667
diff changeset
572 if !exists("g:xmldata_xhtml10s")
829
dc8197342755 updated for version 7.0d04
vimboss
parents: 810
diff changeset
573 runtime! autoload/xml/xhtml10s.vim
dc8197342755 updated for version 7.0d04
vimboss
parents: 810
diff changeset
574 "call htmlcomplete#LoadData()
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 667
diff changeset
575 endif
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 667
diff changeset
576 " }}}
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 667
diff changeset
577 " Tag completion {{{
525
1f8d8c37d6ec updated for version 7.0147
vimboss
parents: 523
diff changeset
578 " Deal with tag completion.
557
862863033fdd updated for version 7.0158
vimboss
parents: 553
diff changeset
579 let opentag = xmlcomplete#GetLastOpenTag("b:unaryTagsStack")
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 674
diff changeset
580 " MM: TODO: GLOT works always the same but with some weird situation it
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 674
diff changeset
581 " behaves as intended in HTML but screws in PHP
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 674
diff changeset
582 let g:ot = opentag
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 674
diff changeset
583 if opentag == '' || &ft == 'php' && !has_key(g:xmldata_xhtml10s, opentag)
641
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
584 " Hack for sometimes failing GetLastOpenTag.
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
585 " As far as I tested fail isn't GLOT fault but problem
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
586 " of invalid document - not properly closed tags and other mish-mash.
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 667
diff changeset
587 " Also when document is empty. Return list of *all* tags.
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 667
diff changeset
588 let tags = keys(g:xmldata_xhtml10s)
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 667
diff changeset
589 call filter(tags, 'v:val !~ "^vimxml"')
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 667
diff changeset
590 else
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 667
diff changeset
591 let tags = g:xmldata_xhtml10s[opentag][0]
641
6a944e0bd5d2 updated for version 7.0186
vimboss
parents: 573
diff changeset
592 endif
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
593 " }}}
525
1f8d8c37d6ec updated for version 7.0147
vimboss
parents: 523
diff changeset
594
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
595 for m in sort(tags)
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
596 if m =~ '^'.context
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
597 call add(res, m)
548
f43150a669dc updated for version 7.0155
vimboss
parents: 532
diff changeset
598 elseif m =~ context
531
da9142bd190a updated for version 7.0149
vimboss
parents: 529
diff changeset
599 call add(res2, m)
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
600 endif
529
0d6092bb72e6 updated for version 7.0148
vimboss
parents: 525
diff changeset
601 endfor
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
602 let menu = res + res2
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
603 if has_key(g:xmldata_xhtml10s, 'vimxmltaginfo')
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
604 let final_menu = []
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
605 for i in range(len(menu))
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
606 let item = menu[i]
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
607 if has_key(g:xmldata_xhtml10s['vimxmltaginfo'], item)
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
608 let m_menu = g:xmldata_xhtml10s['vimxmltaginfo'][item][0]
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
609 let m_info = g:xmldata_xhtml10s['vimxmltaginfo'][item][1]
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
610 else
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
611 let m_menu = ''
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
612 let m_info = ''
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
613 endif
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
614 let final_menu += [{'word':item, 'menu':m_menu, 'info':m_info}]
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
615 endfor
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
616 else
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
617 let final_menu = menu
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
618 endif
9090f866cd57 updated for version 7.0197
vimboss
parents: 659
diff changeset
619 return final_menu
529
0d6092bb72e6 updated for version 7.0148
vimboss
parents: 525
diff changeset
620
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
621 " }}}
523
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
622 endif
a7ae7e043e43 updated for version 7.0146
vimboss
parents:
diff changeset
623 endfunction
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 649
diff changeset
624 " vim:set foldmethod=marker: