625 lines · 26.4 KB · Text
RawDownload
" Vim completion script" Language:	Java Script" Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )" Last Change:	2006 Apr 30 function! javascriptcomplete#CompleteJS(findstart, base)  if a:findstart	" locate the start of the word	let line = getline('.')	let start = col('.') - 1	let curline = line('.')	let compl_begin = col('.') - 2	" Bit risky but JS is rather limited language and local chars shouldn't	" fint way into names	while start >= 0 && line[start - 1] =~ '\k'		let start -= 1	endwhile	let b:compl_context = getline('.')[0:compl_begin]	return start  else	" Initialize base return lists	let res = []	let res2 = []	" a:base is very short - we need context	" Shortcontext is context without a:base, useful for checking if we are	" looking for objects and for what objects we are looking for	let context = b:compl_context	let shortcontext = substitute(context, a:base.'$', '', '')	unlet! b:compl_context 	if exists("b:jsrange")		let file = getline(b:jsrange[0],b:jsrange[1])		unlet! b:jsrange 		if len(b:js_extfiles) > 0			let file = b:js_extfiles + file		endif 	else		let file = getline(1, '$')	endif  	" Completion of properties, methods, etc. {{{	if shortcontext =~ '\.$'		" Complete methods and properties for objects		" DOM separate		let doms = ['style.']		" Arrays		let arrayprop = ['constructor', 'index', 'input', 'length', 'prototype']		let arraymeth = ['concat', 'join', 'pop', 'push', 'reverse', 'shift',					\ 'splice', 'sort', 'toSource', 'toString', 'unshift', 'valueOf',					\ 'watch', 'unwatch']		call map(arraymeth, 'v:val."("')		let arrays = arrayprop + arraymeth 		" Boolean - complete subset of array values		" properties - constructor, prototype		" methods    - toSource, toString, valueOf 		" Date		" properties - constructor, prototype		let datemeth = ['getDate', 'getDay', 'getFullYear', 'getHours', 'getMilliseconds',					\ 'getMinutes', 'getMonth', 'getSeconds', 'getTime', 'getTimezoneOffset',					\ 'getUTCDate', 'getUTCDay', 'getUTCFullYear', 'getUTCHours', 'getUTCMilliseconds',					\ 'getUTCMinutes', 'getUTCMonth', 'getUTCSeconds',					\ 'getYear', 'parse', 'parse',					\ 'setDate', 'setDay', 'setFullYear', 'setHours', 'setMilliseconds',					\ 'setMinutes', 'setMonth', 'setSeconds',					\ 'setUTCDate', 'setUTCDay', 'setUTCFullYear', 'setUTCHours', 'setUTCMilliseconds',					\ 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', 'setYear', 'setTime',					\ 'toGMTString', 'toLocaleString', 'toLocaleDateString', 'toLocaleTimeString',					\ 'toSource', 'toString', 'toUTCString', 'UTC', 'valueOf', 'watch', 'unwatch']		call map(datemeth, 'v:val."("')		let dates = datemeth 		" Function		let funcprop = ['arguments', 'arguments.callee', 'arguments.caller', 'arguments.length',					\ 'arity', 'constructor', 'length', 'prototype']		let funcmeth = ['apply', 'call', 'toSource', 'toString', 'valueOf']		call map(funcmeth, 'v:val."("')		let funcs = funcprop + funcmeth 		" Math		let mathprop = ['E', 'LN2', 'LN10', 'LOG2E', 'LOG10E', 'PI', 'SQRT1_2', 'SQRT']		let mathmeth = ['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor',					\ 'log', 'max', 'min', 'pow', 'random', 'round', 'sin', 'sqrt', 'tan',					\ 'watch', 'unwatch']		call map(mathmeth, 'v:val."("')		let maths = mathprop + mathmeth 		" Number		let numbprop = ['MAX_VALUE', 'MIN_VALUE', 'NaN', 'NEGATIVE_INFINITY', 'POSITIVE_INFINITY', 					\ 'constructor', 'prototype']		let numbmeth = ['toExponential', 'toFixed', 'toPrecision', 'toSource', 'toString', 'valueOf',					\ 'watch', 'unwatch']		call map(numbmeth, 'v:val."("')		let numbs = numbprop + numbmeth 		" Object		let objeprop = ['constructor', 'prototype']		let objemeth = ['eval', 'toSource', 'toString', 'unwatch', 'watch', 'valueOf']		call map(objemeth, 'v:val."("')		let objes = objeprop + objemeth 		" RegExp		let regeprop = ['constructor', 'global', 'ignoreCase', 'lastIndex', 'multiline', 'source', 'prototype']		let regemeth = ['exec', 'test', 'toSource', 'toString', 'watch', 'unwatch']		call map(regemeth, 'v:val."("')		let reges = regeprop + regemeth 		" String		let striprop = ['constructor', 'length', 'prototype']		let strimeth = ['anchor', 'big', 'blink', 'bold', 'charAt', 'charCodeAt', 'concat',					\ 'fixed', 'fontcolor', 'fontsize', 'fromCharCode', 'indexOf', 'italics',					\ 'lastIndexOf', 'link', 'match', 'replace', 'search', 'slice', 'small',					\ 'split', 'strike', 'sub', 'substr', 'substring', 'sup', 'toLowerCase',					\ 'toSource', 'toString', 'toUpperCase', 'watch', 'unwatch']		call map(strimeth, 'v:val."("')		let stris = striprop + strimeth 		" User created properties		let user_props1 = filter(copy(file), 'v:val =~ "this\\.\\k"')		let juser_props1 = join(user_props1, ' ')		let user_props1 = split(juser_props1, '\zethis\.')		unlet! juser_props1		call map(user_props1, 'matchstr(v:val, "this\\.\\zs\\k\\+\\ze")') 		let user_props2 = filter(copy(file), 'v:val =~ "\\.prototype\\.\\k"')		let juser_props2 = join(user_props2, ' ')		let user_props2 = split(juser_props2, '\zeprototype\.')		unlet! juser_props2		call map(user_props2, 'matchstr(v:val, "prototype\\.\\zs\\k\\+\\ze")')		let user_props = user_props1 + user_props2 		" HTML DOM properties		" Anchors - anchor.		let anchprop = ['accessKey', 'charset', 'coords', 'href', 'hreflang', 'id', 'innerHTML',					\ 'name', 'rel', 'rev', 'shape', 'tabIndex', 'target', 'type', 'onBlur', 'onFocus']		let anchmeth = ['blur', 'focus']		call map(anchmeth, 'v:val."("')		let anths = anchprop + anchmeth		" Area - area.		let areaprop = ['accessKey', 'alt', 'coords', 'hash', 'host', 'hostname', 'href', 'id',					\ 'noHref', 'pathname', 'port', 'protocol', 'search', 'shape', 'tabIndex', 'target']		let areameth = ['onClick', 'onDblClick', 'onMouseOut', 'onMouseOver']		call map(areameth, 'v:val."("')		let areas = areaprop + areameth		" Base - base.		let baseprop = ['href', 'id', 'target']		let bases = baseprop		" Body - body.		let bodyprop = ['aLink', 'background', 'gbColor', 'id', 'link', 'scrollLeft', 'scrollTop',					\ 'text', 'vLink']		let bodys = bodyprop		" Document - document.		let docuprop = ['anchors', 'applets', 'childNodes', 'embeds', 'forms', 'images', 'links', 'stylesheets',					\ 'body', 'cookie', 'documentElement', 'domain', 'lastModified', 'referrer', 'title', 'URL']		let documeth = ['close', 'createAttribute', 'createElement', 'createTextNode', 'focus', 'getElementById',					\ 'getElementsByName', 'getElementsByTagName', 'open', 'write', 'writeln',					\ 'onClick', 'onDblClick', 'onFocus', 'onKeyDown', 'onKeyPress', 'onKeyUp',					\ 'onMouseDown', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onResize']		call map(documeth, 'v:val."("')		let docuxprop = ['attributes', 'childNodes', 'doctype', 'documentElement', 'firstChild',					\ 'implementation', 'namespaceURI', 'nextSibling', 'nodeName', 'nodeType',					\ 'nodeValue', 'ownerDocument', 'parentNode', 'previousSibling']		let docuxmeth = ['createAttribute', 'createCDATASection',					\ 'createComment', 'createDocument', 'createDocumentFragment',					\ 'createElement', 'createEntityReference', 'createProcessingInstruction',					\ 'createTextNode']		call map(docuxmeth, 'v:val."("')		let docus = docuprop + docuxprop + documeth + docuxmeth		" Form - form.		let formprop = ['elements', 'acceptCharset', 'action', 'encoding', 'enctype', 'id', 'length',					\ 'method', 'name', 'tabIndex', 'target']		let formmeth = ['reset', 'submit', 'onReset', 'onSubmit']		call map(formmeth, 'v:val."("')		let forms = formprop + formmeth		" Frame - frame.		let framprop = ['contentDocument', 'frameBorder', 'id', 'longDesc', 'marginHeight', 'marginWidth',					\ 'name', 'noResize', 'scrolling', 'src']		let frammeth = ['blur', 'focus']		call map(frammeth, 'v:val."("')		let frams = framprop + frammeth		" Frameset - frameset.		let fsetprop = ['cols', 'id', 'rows']		let fsetmeth = ['blur', 'focus']		call map(fsetmeth, 'v:val."("')		let fsets = fsetprop + fsetmeth		" History - history.		let histprop = ['length']		let histmeth = ['back', 'forward', 'go']		call map(histmeth, 'v:val."("')		let hists = histprop + histmeth		" Iframe - iframe.		let ifraprop = ['align', 'frameBorder', 'height', 'id', 'longDesc', 'marginHeight', 'marginWidth',					\ 'name', 'scrolling', 'src', 'width']		let ifras = ifraprop		" Image - image.		let imagprop = ['align', 'alt', 'border', 'complete', 'height', 'hspace', 'id', 'isMap', 'longDesc',					\ 'lowSrc', 'name', 'src', 'useMap', 'vspace', 'width']		let imagmeth = ['onAbort', 'onError', 'onLoad']		call map(imagmeth, 'v:val."("')		let imags = histprop + imagmeth		" Button - accessible only by other properties		let buttprop = ['accessKey', 'disabled', 'form', 'id', 'name', 'tabIndex', 'type', 'value']		let buttmeth = ['blur', 'click', 'focus', 'onBlur', 'onClick', 'onFocus', 'onMouseDown', 'onMouseUp']		call map(buttmeth, 'v:val."("')		let butts = buttprop + buttmeth		" Checkbox - accessible only by other properties		let checprop = ['accept', 'accessKey', 'align', 'alt', 'checked', 'defaultChecked', 					\ 'disabled', 'form', 'id', 'name', 'tabIndex', 'type', 'value'] 		let checmeth = ['blur', 'click', 'focus', 'onBlur', 'onClick', 'onFocus', 'onMouseDown', 'onMouseUp']		call map(checmeth, 'v:val."("')		let checs = checprop + checmeth		" File upload - accessible only by other properties		let fileprop = ['accept', 'accessKey', 'align', 'alt', 'defaultValue', 					\ 'disabled', 'form', 'id', 'name', 'tabIndex', 'type', 'value'] 		let filemeth = ['blur', 'focus', 'onBlur', 'onClick', 'onFocus', 'onMouseDown', 'onMouseUp']		call map(filemeth, 'v:val."("')		let files = fileprop + filemeth		" Hidden - accessible only by other properties		let hiddprop = ['defaultValue', 'form', 'id', 'name', 'type', 'value'] 		let hidds = hiddprop		" Password - accessible only by other properties		let passprop = ['accept', 'accessKey', 'defaultValue', 					\ 'disabled', 'form', 'id', 'maxLength', 'name', 'readOnly', 'size', 'tabIndex', 					\ 'type', 'value'] 		let passmeth = ['blur', 'click', 'focus', 'select', 'onBlur', 'onFocus', 'onKeyDown', 					\ 'onKeyPress', 'onKeyUp']		call map(passmeth, 'v:val."("')		let passs = passprop + passmeth		" Radio - accessible only by other properties		let radiprop = ['accept', 'accessKey', 'align', 'alt', 'checked', 'defaultChecked', 					\ 'disabled', 'form', 'id', 'name', 'tabIndex', 'type', 'value'] 		let radimeth = ['blur', 'click', 'focus', 'select', 'onBlur', 'onFocus']		call map(radimeth, 'v:val."("')		let radis = radiprop + radimeth		" Reset - accessible only by other properties		let reseprop = ['accept', 'accessKey', 'align', 'alt', 'defaultValue', 					\ 'disabled', 'form', 'id', 'name', 'size', 'tabIndex', 'type', 'value'] 		let resemeth = ['blur', 'click', 'focus', 'select', 'onBlur', 'onFocus']		call map(resemeth, 'v:val."("')		let reses = reseprop + resemeth		" Submit - accessible only by other properties		let submprop = ['accept', 'accessKey', 'align', 'alt', 'defaultValue', 					\ 'disabled', 'form', 'id', 'name', 'size', 'tabIndex', 'type', 'value'] 		let submmeth = ['blur', 'click', 'focus', 'select', 'onClick', 'onSelectStart']		call map(submmeth, 'v:val."("')		let subms = submprop + submmeth		" Text - accessible only by other properties		let textprop = ['accept', 'accessKey', 'align', 'alt', 'defaultValue', 					\ 'disabled', 'form', 'id', 'maxLength', 'name', 'readOnly', 					\ 'size', 'tabIndex', 'type', 'value'] 		let textmeth = ['blur', 'focus', 'select', 'onBlur', 'onChange', 'onFocus', 'onKeyDown',					\ 'onKeyPress', 'onKeyUp', 'onSelect']		call map(textmeth, 'v:val."("')		let texts = textprop + textmeth		" Link - link.		let linkprop = ['charset', 'disabled', 'href', 'hreflang', 'id', 'media',					\ 'rel', 'rev', 'target', 'type']		let linkmeth = ['onLoad']		call map(linkmeth, 'v:val."("')		let links = linkprop + linkmeth		" Location - location.		let locaprop = ['href', 'hash', 'host', 'hostname', 'pathname', 'port', 'protocol',					\ 'search']		let locameth = ['assign', 'reload', 'replace']		call map(locameth, 'v:val."("')		let locas = locaprop + locameth		" Meta - meta.		let metaprop = ['charset', 'content', 'disabled', 'httpEquiv', 'name', 'scheme']		let metas = metaprop		" Navigator - navigator.		let naviprop = ['plugins', 'appCodeName', 'appName', 'appVersion', 'cookieEnabled',					\ 'platform', 'userAgent']		let navimeth = ['javaEnabled', 'taintEnabled']		call map(navimeth, 'v:val."("')		let navis = naviprop + navimeth		" Object - object.		let objeprop = ['align', 'archive', 'border', 'code', 'codeBase', 'codeType', 'data',					\ 'declare', 'form', 'height', 'hspace', 'id', 'name', 'standby', 'tabIndex',					\ 'type', 'useMap', 'vspace', 'width']		let objes = objeprop		" Option - accessible only by other properties		let optiprop = ['defaultSelected', 					\ 'disabled', 'form', 'id', 'index', 'label', 'selected', 'text', 'value']		let optis = optiprop		" Screen - screen.		let screprop = ['availHeight', 'availWidth', 'colorDepth', 'height', 'width']		let scres = screprop		" Select - accessible only by other properties		let seleprop = ['options', 'disabled', 'form', 'id', 'length', 'multiple', 'name', 					\ 'selectedIndex', 'size', 'tabIndex', 'type', 'value'] 		let selemeth = ['blur', 'focus', 'remove', 'onBlur', 'onChange', 'onFocus']		call map(selemeth, 'v:val."("')		let seles = seleprop + selemeth		" Style - style.		let stylprop = ['background', 'backgroundAttachment', 'backgroundColor', 'backgroundImage',					\ 'backgroundPosition', 'backgroundRepeat',					\ 'border', 'borderBottom', 'borderLeft', 'borderRight', 'borderTop',					\ 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor',					\ 'borderBottomStyle', 'borderLeftStyle', 'borderRightStyle', 'borderTopStyle',					\ 'borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth',					\ 'borderColor', 'borderStyle', 'borderWidth', 'margin', 'marginBottom',					\ 'marginLeft', 'marginRight', 'marginTop', 'outline', 'outlineStyle', 'outlineWidth',					\ 'outlineColor', 'outlineStyle', 'outlineWidth', 'padding', 'paddingBottom',					\ 'paddingLeft', 'paddingRight', 'paddingTop',					\ 'clear', 'clip', 'clipBottom', 'clipLeft', 'clipRight', 'clipTop', 'content',					\ 'counterIncrement', 'counterReset', 'cssFloat', 'cursor', 'direction',					\ 'display', 'markerOffset', 'marks', 'maxHeight', 'maxWidth', 'minHeight',					\ 'minWidth', 'overflow', 'overflowX', 'overflowY', 'verticalAlign', 'visibility',					\ 'width',					\ 'listStyle', 'listStyleImage', 'listStylePosition', 'listStyleType',					\ 'cssText', 'bottom', 'height', 'left', 'position', 'right', 'top', 'width', 'zindex',					\ 'orphans', 'widows', 'page', 'pageBreakAfter', 'pageBreakBefore', 'pageBreakInside',					\ 'borderCollapse', 'borderSpacing', 'captionSide', 'emptyCells', 'tableLayout',					\ 'color', 'font', 'fontFamily', 'fontSize', 'fontSizeAdjust', 'fontStretch',					\ 'fontStyle', 'fontVariant', 'fontWeight', 'letterSpacing', 'lineHeight', 'quotes',					\ 'textAlign', 'textIndent', 'textShadow', 'textTransform', 'textUnderlinePosition',					\ 'unicodeBidi', 'whiteSpace', 'wordSpacing']		let styls = stylprop		" Table - table.		let tablprop = ['rows', 'tBodies', 'align', 'bgColor', 'border', 'caption', 'cellPadding',					\ 'cellSpacing', 'frame', 'height', 'rules', 'summary', 'tFoot', 'tHead', 'width']		let tablmeth = ['createCaption', 'createTFoot', 'createTHead', 'deleteCaption', 'deleteRow',					\ 'deleteTFoot', 'deleteTHead', 'insertRow']		call map(tablmeth, 'v:val."("')		let tabls = tablprop + tablmeth		" Table data - TableData.		let tdatprop = ['abbr', 'align', 'axis', 'bgColor', 'cellIndex', 'ch', 'chOff',					\ 'colSpan', 'headers', 'noWrap', 'rowSpan', 'scope', 'vAlign', 'width']		let tdats = tdatprop		" Table row - TableRow.		let trowprop = ['cells', 'align', 'bgColor', 'ch', 'chOff', 'rowIndex', 'sectionRowIndex',					\ 'vAlign']		let trowmeth = ['deleteCell', 'insertCell']		call map(trowmeth, 'v:val."("')		let trows = trowprop + trowmeth		" Textarea - accessible only by other properties		let tareprop = ['accessKey', 'cols', 'defaultValue', 					\ 'disabled', 'form', 'id', 'name', 'readOnly', 'rows', 					\ 'tabIndex', 'type', 'value', 'selectionStart', 'selectionEnd'] 		let taremeth = ['blur', 'focus', 'select', 'onBlur', 'onChange', 'onFocus']		call map(taremeth, 'v:val."("')		let tares = tareprop + taremeth		" Window - window.		let windprop = ['frames', 'closed', 'defaultStatus', 'encodeURI', 'event', 'history',					\ 'length', 'location', 'name', 'onload', 'opener', 'parent', 'screen', 'self',					\ 'status', 'top', 'XMLHttpRequest', 'ActiveXObject']		let windmeth = ['alert', 'blur', 'clearInterval', 'clearTimeout', 'close', 'confirm', 'focus',					\ 'moveBy', 'moveTo', 'open', 'print', 'prompt', 'scrollBy', 'scrollTo', 'setInterval',					\ 'setTimeout']		call map(windmeth, 'v:val."("')		let winds = windprop + windmeth		" XMLHttpRequest - access by new xxx()		let xmlhprop = ['onreadystatechange', 'readyState', 'responseText', 'responseXML',					\ 'status', 'statusText', 'parseError']		let xmlhmeth = ['abort', 'getAllResponseHeaders', 'getResponseHeaders', 'open',					\ 'send', 'setRequestHeader']		call map(xmlhmeth, 'v:val."("')		let xmlhs = xmlhprop + xmlhmeth 		" XML DOM		" Attributes - element.attributes[x].		let xdomattrprop = ['name', 'specified', 'value']		" Element - anyelement.		let xdomelemprop = ['attributes', 'childNodes', 'firstChild', 'lastChild', 					\ 'namespaceURI', 'nextSibling', 'nodeName', 'nodeType', 'nodeValue',					\ 'ownerDocument', 'parentNode', 'prefix', 'previousSibling', 'tagName']		let xdomelemmeth = ['appendChild', 'cloneNode', 'getAttribute', 'getAttributeNode',					\ 'getElementsByTagName', 'hasChildNodes', 'insertBefore', 'normalize',					\ 'removeAttribute', 'removeAttributeNode', 'removeChild', 'replaceChild',					\ 'setAttribute', 'setAttributeNode']		call map(xdomelemmeth, 'v:val."("')		let xdomelems = xdomelemprop + xdomelemmeth		" Node - anynode.		let xdomnodeprop = ['attributes', 'childNodes', 'firstChild', 'lastChild', 					\ 'namespaceURI', 'nextSibling', 'nodeName', 'nodeType', 'nodeValue',					\ 'ownerDocument', 'parentNode', 'prefix', 'previousSibling']		let xdomnodemeth = ['appendChild', 'cloneNode',					\ 'hasChildNodes', 'insertBefore', 'removeChild', 'replaceChild']		call map(xdomnodemeth, 'v:val."("')		let xdomnodes = xdomnodeprop + xdomnodemeth		" NodeList 		let xdomnliss = ['length', 'item(']		" Error - parseError.		let xdomerror = ['errorCode', 'reason', 'line', 'linepos', 'srcText', 'url', 'filepos'] 		" Find object type declaration to reduce number of suggestions. {{{		" 1. Get object name		" 2. Find object declaration line		" 3. General declaration follows "= new Type" syntax, additional else		"    for regexp "= /re/"		" 4. Make correction for Microsoft.XMLHTTP ActiveXObject		" 5. Repeat for external files		let object = matchstr(shortcontext, '\zs\k\+\ze\(\[.\{-}\]\)\?\.$')		if len(object) > 0			let decl_line = search(object.'.\{-}=\s*new\s*', 'bn')			if decl_line > 0				let object_type = matchstr(getline(decl_line), object.'.\{-}=\s*new\s*\zs\k\+\ze')				if object_type == 'ActiveXObject' && matchstr(getline(decl_line), object.'.\{-}=\s*new\s*ActiveXObject\s*(.Microsoft\.XMLHTTP.)') != ''						let object_type = 'XMLHttpRequest'				endif			else				let decl_line = search('var\s*'.object.'\s*=\s*\/', 'bn')				if decl_line > 0					let object_type = 'RegExp'				endif			endif			" We didn't find var declaration in current file but we may have			" something in external files.			if decl_line == 0 && exists("b:js_extfiles")				let dext_line = filter(copy(b:js_extfiles), 'v:val =~ "'.object.'.\\{-}=\\s*new\\s*"')				if len(dext_line) > 0					let object_type = matchstr(dext_line[-1], object.'.\{-}=\s*new\s*\zs\k\+\ze')					if object_type == 'ActiveXObject' && matchstr(dext_line[-1], object.'.\{-}=\s*new\s*ActiveXObject\s*(.Microsoft\.XMLHTTP.)') != ''							let object_type = 'XMLHttpRequest'					endif				else					let dext_line = filter(copy(b:js_extfiles), 'v:val =~ "var\s*'.object.'\\s*=\\s*\\/"')					if len(dext_line) > 0						let object_type = 'RegExp'					endif				endif			endif		endif		" }}} 		if !exists('object_type')			let object_type = ''		endif 		if object_type == 'Date'			let values = dates		elseif object_type == 'Image'			let values = imags		elseif object_type == 'Array'			let values = arrays		elseif object_type == 'Boolean'			" TODO: a bit more than real boolean			let values = arrays		elseif object_type == 'XMLHttpRequest'			let values = xmlhs		elseif object_type == 'String'			let values = stris		elseif object_type == 'RegExp'			let values = reges		elseif object_type == 'Math'			let values = maths		endif 		if !exists('values')		" List of properties		if shortcontext =~ 'Math\.$'			let values = maths		elseif shortcontext =~ 'anchors\(\[.\{-}\]\)\?\.$'			let values = anths		elseif shortcontext =~ 'area\.$'			let values = areas		elseif shortcontext =~ 'base\.$'			let values = bases		elseif shortcontext =~ 'body\.$'			let values = bodys		elseif shortcontext =~ 'document\.$'			let values = docus		elseif shortcontext =~ 'forms\(\[.\{-}\]\)\?\.$'			let values = forms		elseif shortcontext =~ 'frameset\.$'			let values = fsets		elseif shortcontext =~ 'history\.$'			let values = hists		elseif shortcontext =~ 'iframe\.$'			let values = ifras		elseif shortcontext =~ 'images\(\[.\{-}\]\)\?\.$'			let values = imags		elseif shortcontext =~ 'links\(\[.\{-}\]\)\?\.$'			let values = links		elseif shortcontext =~ 'location\.$'			let values = locas		elseif shortcontext =~ 'meta\.$'			let values = metas		elseif shortcontext =~ 'navigator\.$'			let values = navis		elseif shortcontext =~ 'object\.$'			let values = objes		elseif shortcontext =~ 'screen\.$'			let values = scres		elseif shortcontext =~ 'style\.$'			let values = styls		elseif shortcontext =~ 'table\.$'			let values = tabls		elseif shortcontext =~ 'TableData\.$'			let values = tdats		elseif shortcontext =~ 'TableRow\.$'			let values = trows		elseif shortcontext =~ 'window\.$'			let values = winds		elseif shortcontext =~ 'parseError\.$'			let values = xdomerror

Lines 1–500 of 625.