changeset 838:8e5830943bff v7.0e04

updated for version 7.0e04
author vimboss
date Thu, 20 Apr 2006 22:17:20 +0000
parents 6bb1fa855dc9
children 1f3b1021f002
files runtime/autoload/htmlcomplete.vim runtime/autoload/pythoncomplete.vim runtime/autoload/rubycomplete.vim runtime/autoload/xml/xhtml10s.vim runtime/autoload/xml/xhtml10t.vim runtime/doc/insert.txt runtime/doc/intro.txt runtime/doc/map.txt runtime/doc/options.txt runtime/doc/spell.txt runtime/doc/syntax.txt runtime/doc/tags runtime/doc/todo.txt runtime/doc/version7.txt runtime/spell/ca/ca_ES.diff runtime/spell/es/es_ES.diff runtime/syntax/bindzone.vim runtime/syntax/crontab.vim runtime/syntax/inform.vim runtime/syntax/lua.vim src/INSTALLpc.txt src/auto/configure src/config.h.in src/configure.in src/eval.c src/ex_docmd.c src/ex_getln.c src/feature.h src/gui.c src/gui_mac.c src/gui_motif.c src/gui_w48.c src/memline.c src/menu.c src/misc1.c src/option.c src/po/de.po src/po/fr.po src/po/it.po src/po/ja.po src/po/ja.sjis.po src/po/pl.UTF-8.po src/po/pl.cp1250.po src/po/pl.po src/po/sk.cp1250.po src/po/sk.po src/po/sv.po src/po/zh_CN.UTF-8.po src/po/zh_CN.cp936.po src/po/zh_CN.po src/popupmnu.c src/syntax.c src/tag.c src/version.h
diffstat 54 files changed, 2574 insertions(+), 5119 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/autoload/htmlcomplete.vim
+++ b/runtime/autoload/htmlcomplete.vim
@@ -1,7 +1,7 @@
 " Vim completion script
-" Language:	HTML (XHTML 1.0 Strict by default)
+" Language:	HTML and XHTML
 " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2006 Apr 17
+" Last Change:	2006 Apr 20
 
 function! htmlcomplete#CompleteTags(findstart, base)
   if a:findstart
@@ -159,12 +159,12 @@ function! htmlcomplete#CompleteTags(find
 	if exists("b:entitiescompl")
 		unlet! b:entitiescompl
 
-		if !exists("g:html_omni")
+		if !exists("b:html_omni")
 			"runtime! autoload/xml/xhtml10s.vim
 			call htmlcomplete#LoadData()
 		endif
 
-	    let entities =  g:html_omni['vimxmlentities']
+	    let entities =  b:html_omni['vimxmlentities']
 
 		if len(a:base) == 1
 			for m in entities
@@ -462,8 +462,8 @@ function! htmlcomplete#CompleteTags(find
 					endfor
 				endif
 			else
-				if has_key(g:html_omni, tag) && has_key(g:html_omni[tag][1], attrname)
-					let values = g:html_omni[tag][1][attrname]
+				if has_key(b:html_omni, tag) && has_key(b:html_omni[tag][1], attrname)
+					let values = b:html_omni[tag][1][attrname]
 				else
 					return []
 				endif
@@ -503,13 +503,13 @@ function! htmlcomplete#CompleteTags(find
 		let sbase = matchstr(context, '.*\ze\s.*')
 
 		" Load data {{{
-		if !exists("g:html_omni_gen")
+		if !exists("b:html_omni_gen")
 			call htmlcomplete#LoadData()
 		endif
 		" }}}
 		
-		if has_key(g:html_omni, tag)
-			let attrs = keys(g:html_omni[tag][1])
+		if has_key(b:html_omni, tag)
+			let attrs = keys(b:html_omni[tag][1])
 		else
 			return []
 		endif
@@ -522,13 +522,13 @@ function! htmlcomplete#CompleteTags(find
 			endif
 		endfor
 		let menu = res + res2
-		if has_key(g:html_omni, 'vimxmlattrinfo')
+		if has_key(b:html_omni, 'vimxmlattrinfo')
 			let final_menu = []
 			for i in range(len(menu))
 				let item = menu[i]
-				if has_key(g:html_omni['vimxmlattrinfo'], item)
-					let m_menu = g:html_omni['vimxmlattrinfo'][item][0]
-					let m_info = g:html_omni['vimxmlattrinfo'][item][1]
+				if has_key(b:html_omni['vimxmlattrinfo'], item)
+					let m_menu = b:html_omni['vimxmlattrinfo'][item][0]
+					let m_info = b:html_omni['vimxmlattrinfo'][item][1]
 					if m_menu !~ 'Bool'
 						let item .= '="'
 					endif
@@ -558,7 +558,7 @@ function! htmlcomplete#CompleteTags(find
 	endif
 	" }}}
 	" Load data {{{
-	if !exists("g:html_omni")
+	if !exists("b:html_omni")
 		"runtime! autoload/xml/xhtml10s.vim
 		call htmlcomplete#LoadData()
 	endif
@@ -568,16 +568,16 @@ function! htmlcomplete#CompleteTags(find
 	let opentag = tolower(xmlcomplete#GetLastOpenTag("b:unaryTagsStack"))
 	" MM: TODO: GLOT works always the same but with some weird situation it
 	" behaves as intended in HTML but screws in PHP
-	if opentag == '' || &ft == 'php' && !has_key(g:html_omni, opentag)
+	if opentag == '' || &ft == 'php' && !has_key(b:html_omni, opentag)
 		" Hack for sometimes failing GetLastOpenTag.
 		" As far as I tested fail isn't GLOT fault but problem
 		" of invalid document - not properly closed tags and other mish-mash.
 		" Also when document is empty. Return list of *all* tags.
-	    let tags = keys(g:html_omni)
+	    let tags = keys(b:html_omni)
 		call filter(tags, 'v:val !~ "^vimxml"')
 	else
-		if has_key(g:html_omni, opentag)
-			let tags = g:html_omni[opentag][0]
+		if has_key(b:html_omni, opentag)
+			let tags = b:html_omni[opentag][0]
 		else
 			return []
 		endif
@@ -596,17 +596,20 @@ function! htmlcomplete#CompleteTags(find
 		endif
 	endfor
 	let menu = res + res2
-	if has_key(g:html_omni, 'vimxmltaginfo')
+	if has_key(b:html_omni, 'vimxmltaginfo')
 		let final_menu = []
 		for i in range(len(menu))
 			let item = menu[i]
-			if has_key(g:html_omni['vimxmltaginfo'], item)
-				let m_menu = g:html_omni['vimxmltaginfo'][item][0]
-				let m_info = g:html_omni['vimxmltaginfo'][item][1]
+			if has_key(b:html_omni['vimxmltaginfo'], item)
+				let m_menu = b:html_omni['vimxmltaginfo'][item][0]
+				let m_info = b:html_omni['vimxmltaginfo'][item][1]
 			else
 				let m_menu = ''
 				let m_info = ''
 			endif
+			if &ft == 'html' && exists("uppercase_tag") && uppercase_tag == 1
+				let item = toupper(item)
+			endif
 			let final_menu += [{'word':item, 'menu':m_menu, 'info':m_info}]
 		endfor
 	else
@@ -619,25 +622,39 @@ function! htmlcomplete#CompleteTags(find
 endfunction
 
 function! htmlcomplete#LoadData() " {{{
-	if !exists("g:html_omni_flavor")
-		let g:html_omni_flavor = 'xhtml10s'
+	if !exists("b:html_omni_flavor")
+		if &ft == 'html'
+			let b:html_omni_flavor = 'html401t'
+		else
+			let b:html_omni_flavor = 'xhtml10s'
+		endif
 	endif
-	exe 'runtime! autoload/xml/'.g:html_omni_flavor.'.vim'
-	" This one is necessary because we don't know if
-	" g:html_omni_flavor file exists and was sourced
+	" With that if we still have bloated memory but create new buffer
+	" variables only by linking to existing g:variable, not sourcing whole
+	" file.
+	if exists('g:xmldata_'.b:html_omni_flavor)
+		exe 'let b:html_omni = g:xmldata_'.b:html_omni_flavor
+	else
+		exe 'runtime! autoload/xml/'.b:html_omni_flavor.'.vim'
+		exe 'let b:html_omni = g:xmldata_'.b:html_omni_flavor
+	endif
+	" This repetition is necessary because we don't know if
+	" b:html_omni_flavor file exists and was sourced
 	" Proper checking for files would require iterating through 'rtp'
 	" and could introduce OS dependent mess.
-	if !exists("g:xmldata_".g:html_omni_flavor)
-		let g:html_omni_flavor = 'xhtml10s'
-		runtime! autoload/xml/xhtml10s.vim
+	if !exists("g:xmldata_".b:html_omni_flavor)
+		if &ft == 'html'
+			let b:html_omni_flavor = 'html401t'
+		else
+			let b:html_omni_flavor = 'xhtml10s'
+		endif
 	endif
-
-	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()
+	if exists('g:xmldata_'.b:html_omni_flavor)
+		exe 'let b:html_omni = g:xmldata_'.b:html_omni_flavor
+	else
+		exe 'runtime! autoload/xml/'.b:html_omni_flavor.'.vim'
+		exe 'let b:html_omni = g:xmldata_'.b:html_omni_flavor
+	endif
 endfunction
 " }}}
 " vim:set foldmethod=marker:
--- a/runtime/autoload/pythoncomplete.vim
+++ b/runtime/autoload/pythoncomplete.vim
@@ -1,20 +1,16 @@
 "pythoncomplete.vim - Omni Completion for python
-" Maintainer: Aaron Griffin
-" Version: 0.3
-" Last Updated: 23 January 2006
+" Maintainer: Aaron Griffin <aaronmgriffin@gmail.com>
+" Version: 0.5
+" Last Updated: 19 April 2006
 "
-"   v0.3 Changes:
-"       added top level def parsing
-"       for safety, call returns are not evaluated
-"       handful of parsing changes
-"       trailing ( and . characters
-"       argument completion on open parens
-"       stop parsing at current line - ++performance, local var resolution
+" Yeah, I skipped a version number - 0.4 was never public.
+"  It was a bugfix version on top of 0.3.  This is a complete
+"  rewrite.
 "
-"   TODO
-"       RExec subclass
-"       Code cleanup + make class
-"       use internal dict, not globals()
+" TODO:
+" User defined docstrings aren't handled right...
+" 'info' item output can use some formatting work
+" Add an "unsafe eval" mode, to allow for return type evaluation
 
 if !has('python')
     echo "Error: Required vim compiled with +python"
@@ -23,12 +19,12 @@ endif
 
 function! pythoncomplete#Complete(findstart, base)
     "findstart = 1 when we need to get the text length
-    if a:findstart
+    if a:findstart == 1
         let line = getline('.')
         let idx = col('.')
         while idx > 0
             let idx -= 1
-            let c = line[idx-1]
+            let c = line[idx]
             if c =~ '\w'
                 continue
             elseif ! c =~ '\.'
@@ -42,310 +38,530 @@ function! pythoncomplete#Complete(findst
         return idx
     "findstart = 0 when we need to return the list of completions
     else
-        execute "python get_completions('" . a:base . "')"
+        "vim no longer moves the cursor upon completion... fix that
+        let line = getline('.')
+        let idx = col('.')
+        let cword = ''
+        while idx > 0
+            let idx -= 1
+            let c = line[idx]
+            if c =~ '\w' || c =~ '\.'
+                let cword = c . cword
+                continue
+            elseif strlen(cword) > 0 || idx == 0
+                break
+            endif
+        endwhile
+        execute "python vimcomplete('" . cword . "', '" . a:base . "')"
         return g:pythoncomplete_completions
     endif
 endfunction
 
 function! s:DefPython()
 python << PYTHONEOF
-import vim, sys, types
-import __builtin__
-import tokenize, keyword, cStringIO
+import sys, tokenize, cStringIO, types
+from token import NAME, DEDENT, NEWLINE, STRING
 
-LOCALDEFS = \
-	['LOCALDEFS', 'clean_up','eval_source_code', \
-	 'get_completions', '__builtin__', '__builtins__', \
-	 'dbg', '__name__', 'vim', 'sys', 'parse_to_end', \
-     'parse_statement', 'tokenize', 'keyword', 'cStringIO', \
-     'debug_level', 'safe_eval', '_ctor', 'get_arguments', \
-     'strip_calls', 'types', 'parse_block']
+debugstmts=[]
+def dbg(s): debugstmts.append(s)
+def showdbg():
+    for d in debugstmts: print "DBG: %s " % d
 
-def dbg(level,msg):
-    debug_level = 1
+def vimcomplete(context,match):
+    global debugstmts
+    debugstmts = []
     try:
-        debug_level = vim.eval("g:pythoncomplete_debug_level")
-    except:
-        pass
-    if level <= debug_level: print(msg)
+        import vim
+        def complsort(x,y):
+            return x['abbr'] > y['abbr']
+        cmpl = Completer()
+        cmpl.evalsource('\n'.join(vim.current.buffer),vim.eval("line('.')"))
+        all = cmpl.get_completions(context,match)
+        all.sort(complsort)
+        dictstr = '['
+        # have to do this for double quoting
+        for cmpl in all:
+            dictstr += '{'
+            for x in cmpl: dictstr += '"%s":"%s",' % (x,cmpl[x])
+            dictstr += '"icase":0},'
+        if dictstr[-1] == ',': dictstr = dictstr[:-1]
+        dictstr += ']'
+        dbg("dict: %s" % dictstr)
+        vim.command("silent let g:pythoncomplete_completions = %s" % dictstr)
+        #dbg("Completion dict:\n%s" % all)
+    except vim.error:
+        dbg("VIM Error: %s" % vim.error)
+
+class Completer(object):
+    def __init__(self):
+       self.compldict = {}
+       self.parser = PyParser()
+
+    def evalsource(self,text,line=0):
+        sc = self.parser.parse(text,line)
+        src = sc.get_code()
+        dbg("source: %s" % src)
+        try: exec(src) in self.compldict
+        except: dbg("parser: %s, %s" % (sys.exc_info()[0],sys.exc_info()[1]))
+        for l in sc.locals:
+            try: exec(l) in self.compldict
+            except: dbg("locals: %s, %s [%s]" % (sys.exc_info()[0],sys.exc_info()[1],l))
+
+    def _cleanstr(self,doc):
+        return doc.replace('"',' ')\
+                  .replace("'",' ')\
+                  .replace('\n',' ')\
+                  .replace('\r',' ')\
+                  .replace('
',' ')
+
+    def get_arguments(self,func_obj):
+        def _ctor(obj):
+            try: return class_ob.__init__.im_func
+            except AttributeError:
+                for base in class_ob.__bases__:
+                    rc = _find_constructor(base)
+                    if rc is not None: return rc
+            return None
 
-def strip_calls(stmt):
-    parsed=''
-    level = 0
-    for c in stmt:
-        if c in ['[','(']:
-            level += 1
-        elif c in [')',']']:
-            level -= 1
-        elif level == 0:
-            parsed += c
-    ##dbg(10,"stripped: %s" % parsed)
-    return parsed
+        arg_offset = 1
+        if type(func_obj) == types.ClassType: func_obj = _ctor(func_obj)
+        elif type(func_obj) == types.MethodType: func_obj = func_obj.im_func
+        else: arg_offset = 0
+        
+        arg_text = ')'
+        if type(func_obj) in [types.FunctionType, types.LambdaType]:
+            try:
+                cd = func_obj.func_code
+                real_args = cd.co_varnames[arg_offset:cd.co_argcount]
+                defaults = func_obj.func_defaults or []
+                defaults = [map(lambda name: "=%s" % name, defaults)]
+                defaults = [""] * (len(real_args)-len(defaults)) + defaults
+                items = map(lambda a,d: a+d, real_args, defaults)
+                if func_obj.func_code.co_flags & 0x4:
+                    items.append("...")
+                if func_obj.func_code.co_flags & 0x8:
+                    items.append("***")
+                arg_text = ", ".join(items) + ')'
+
+            except:
+                dbg("completion: %s: %s" % (sys.exc_info()[0],sys.exc_info()[1]))
+                pass
+        if len(arg_text) == 0:
+            # The doc string sometimes contains the function signature
+            #  this works for alot of C modules that are part of the
+            #  standard library
+            doc = func_obj.__doc__
+            if doc:
+                doc = doc.lstrip()
+                pos = doc.find('\n')
+                if pos > 0:
+                    sigline = doc[:pos]
+                    lidx = sigline.find('(')
+                    ridx = sigline.find(')')
+                    if lidx > 0 and ridx > 0:
+                        arg_text = sigline[lidx+1:ridx] + ')'
+        return arg_text
+
+    def get_completions(self,context,match):
+        dbg("get_completions('%s','%s')" % (context,match))
+        stmt = ''
+        if context: stmt += str(context)
+        if match: stmt += str(match)
+        try:
+            result = None
+            all = {}
+            ridx = stmt.rfind('.')
+            if len(stmt) > 0 and stmt[-1] == '(':
+                #TODO
+                result = eval(_sanitize(stmt[:-1]), self.compldict)
+                doc = result.__doc__
+                if doc == None: doc = ''
+                args = self.get_arguments(res)
+                return [{'word':self._cleanstr(args),'info':self._cleanstr(doc),'kind':'p'}]
+            elif ridx == -1:
+                match = stmt
+                all = self.compldict
+            else:
+                match = stmt[ridx+1:]
+                stmt = _sanitize(stmt[:ridx])
+                result = eval(stmt, self.compldict)
+                all = dir(result)
 
-def get_completions(base):
-    stmt = vim.eval('expand("<cWORD>")')
-    #dbg(1,"statement: %s - %s" % (stmt, base))
-    stmt = stmt+base
-    eval_source_code()
+            dbg("completing: stmt:%s" % stmt)
+            completions = []
+
+            try: maindoc = result.__doc__
+            except: maindoc = ' '
+            if maindoc == None: maindoc = ' '
+            for m in all:
+                if m == "_PyCmplNoType": continue #this is internal
+                try:
+                    dbg('possible completion: %s' % m)
+                    if m.find(match) == 0:
+                        if result == None: inst = all[m]
+                        else: inst = getattr(result,m)
+                        try: doc = inst.__doc__
+                        except: doc = maindoc
+                        typestr = str(inst)
+                        if doc == None or doc == '': doc = maindoc
+
+                        wrd = m[len(match):]
+                        c = {'word':wrd, 'abbr':m,  'info':self._cleanstr(doc),'kind':'m'}
+                        if "function" in typestr:
+                            c['word'] += '('
+                            c['abbr'] += '(' + self._cleanstr(self.get_arguments(inst))
+                            c['kind'] = 'f'
+                        elif "method" in typestr:
+                            c['word'] += '('
+                            c['abbr'] += '(' + self._cleanstr(self.get_arguments(inst))
+                            c['kind'] = 'f'
+                        elif "module" in typestr:
+                            c['word'] += '.'
+                            c['kind'] = 'm'
+                        elif "class" in typestr:
+                            c['word'] += '('
+                            c['abbr'] += '('
+                            c['kind']='c'
+                        completions.append(c)
+                except:
+                    i = sys.exc_info()
+                    dbg("inner completion: %s,%s [stmt='%s']" % (i[0],i[1],stmt))
+            return completions
+        except:
+            i = sys.exc_info()
+            dbg("completion: %s,%s [stmt='%s']" % (i[0],i[1],stmt))
+            return []
+
+class Scope(object):
+    def __init__(self,name,indent):
+        self.subscopes = []
+        self.docstr = ''
+        self.locals = []
+        self.parent = None
+        self.name = name
+        self.indent = indent
+
+    def add(self,sub):
+        #print 'push scope: [%s@%s]' % (sub.name,sub.indent)
+        sub.parent = self
+        self.subscopes.append(sub)
+        return sub
 
-    try:
-        ridx = stmt.rfind('.')
-        if stmt[-1] == '(':
-            match = ""
-            stmt = strip_calls(stmt[:len(stmt)-1])
-            all = get_arguments(eval(stmt))
-        elif ridx == -1:
-            match = stmt
-            all = globals() + __builtin__.__dict__
-        else:
-            match = stmt[ridx+1:]
-            stmt = strip_calls(stmt[:ridx])
-            all = eval(stmt).__dict__
+    def doc(self,str):
+        """ Clean up a docstring """
+        d = str.replace('\n',' ')
+        d = d.replace('\t',' ')
+        while d.find('  ') > -1: d = d.replace('  ',' ')
+        while d[0] in '"\'\t ': d = d[1:]
+        while d[-1] in '"\'\t ': d = d[:-1]
+        self.docstr = d
+
+    def local(self,loc):
+        if not self._hasvaralready(loc):
+            self.locals.append(loc)
+
+    def copy_decl(self,indent=0):
+        """ Copy a scope's declaration only, at the specified indent level - not local variables """
+        return Scope(self.name,indent)
+
+    def _hasvaralready(self,test):
+        "Convienance function... keep out duplicates"
+        if test.find('=') > -1:
+            var = test.split('=')[0].strip()
+            for l in self.locals:
+                if l.find('=') > -1 and var == l.split('=')[0].strip():
+                    return True
+        return False
 
-        #dbg(15,"completions for: %s, match=%s" % (stmt,match))
-        completions = []
-        if type(all) == types.DictType:
-            for m in all:
-                if m.find('_') != 0 and m.find(match) == 0 and \
-			       m not in LOCALDEFS:
-                    #dbg(25,"matched... %s, %s" % (m, m.find(match)))
-                    typestr = str(all[m])
-                    if "function" in typestr: m += '('
-                    elif "method" in typestr: m += '('
-                    elif "module" in typestr: m += '.'
-                    elif "class" in typestr: m += '('
-                    completions.append(m)
-            completions.sort()
+    def get_code(self):
+        # we need to start with this, to fix up broken completions
+        # hopefully this name is unique enough...
+        str = '"""'+self.docstr+'"""\n'
+        str += 'class _PyCmplNoType:\n    def __getattr__(self,name):\n        return None\n'
+        for sub in self.subscopes:
+            str += sub.get_code()
+        #str += '\n'.join(self.locals)+'\n'
+
+        return str
+
+    def pop(self,indent):
+        #print 'pop scope: [%s] to [%s]' % (self.indent,indent)
+        outer = self
+        while outer.parent != None and outer.indent >= indent:
+            outer = outer.parent
+        return outer
+
+    def currentindent(self):
+        #print 'parse current indent: %s' % self.indent
+        return '    '*self.indent
+
+    def childindent(self):
+        #print 'parse child indent: [%s]' % (self.indent+1)
+        return '    '*(self.indent+1)
+
+class Class(Scope):
+    def __init__(self, name, supers, indent):
+        Scope.__init__(self,name,indent)
+        self.supers = supers
+    def copy_decl(self,indent=0):
+        c = Class(self.name,self.supers,indent)
+        for s in self.subscopes:
+            c.add(s.copy_decl(indent+1))
+        return c
+    def get_code(self):
+        str = '%sclass %s' % (self.currentindent(),self.name)
+        if len(self.supers) > 0: str += '(%s)' % ','.join(self.supers)
+        str += ':\n'
+        if len(self.docstr) > 0: str += self.childindent()+'"""'+self.docstr+'"""\n'
+        if len(self.subscopes) > 0:
+            for s in self.subscopes: str += s.get_code()
         else:
-            completions.append(all)
-        #dbg(10,"all completions: %s" % completions)
-        vim.command("let g:pythoncomplete_completions = %s" % completions)
-    except:
-        vim.command("let g:pythoncomplete_completions = []")
-        #dbg(1,"exception: %s" % sys.exc_info()[1])
-    clean_up()
+            str += '%spass\n' % self.childindent()
+        return str
+
+
+class Function(Scope):
+    def __init__(self, name, params, indent):
+        Scope.__init__(self,name,indent)
+        self.params = params
+    def copy_decl(self,indent=0):
+        return Function(self.name,self.params,indent)
+    def get_code(self):
+        str = "%sdef %s(%s):\n" % \
+            (self.currentindent(),self.name,','.join(self.params))
+        if len(self.docstr) > 0: str += self.childindent()+'"""'+self.docstr+'"""\n'
+        str += "%spass\n" % self.childindent()
+        return str
+
+class PyParser:
+    def __init__(self):
+        self.top = Scope('global',0)
+        self.scope = self.top
+
+    def _parsedotname(self,pre=None):
+        #returns (dottedname, nexttoken)
+        name = []
+        if pre == None:
+            tokentype, token, indent = self.next()
+            if tokentype != NAME and token != '*':
+                return ('', token)
+        else: token = pre
+        name.append(token)
+        while True:
+            tokentype, token, indent = self.next()
+            if token != '.': break
+            tokentype, token, indent = self.next()
+            if tokentype != NAME: break
+            name.append(token)
+        return (".".join(name), token)
+
+    def _parseimportlist(self):
+        imports = []
+        while True:
+            name, token = self._parsedotname()
+            if not name: break
+            name2 = ''
+            if token == 'as': name2, token = self._parsedotname()
+            imports.append((name, name2))
+            while token != "," and "\n" not in token:
+                tokentype, token, indent = self.next()
+            if token != ",": break
+        return imports
+
+    def _parenparse(self):
+        name = ''
+        names = []
+        level = 1
+        while True:
+            tokentype, token, indent = self.next()
+            if token in (')', ',') and level == 1:
+                names.append(name)
+                name = ''
+            if token == '(':
+                level += 1
+            elif token == ')':
+                level -= 1
+                if level == 0: break
+            elif token == ',' and level == 1:
+                pass
+            else:
+                name += str(token)
+        return names
+
+    def _parsefunction(self,indent):
+        self.scope=self.scope.pop(indent)
+        tokentype, fname, ind = self.next()
+        if tokentype != NAME: return None
+
+        tokentype, open, ind = self.next()
+        if open != '(': return None
+        params=self._parenparse()
+
+        tokentype, colon, ind = self.next()
+        if colon != ':': return None
+
+        return Function(fname,params,indent)
 
-def get_arguments(func_obj):
-    def _ctor(obj):
-        try:
-            return class_ob.__init__.im_func
-        except AttributeError:
-            for base in class_ob.__bases__:
-                rc = _find_constructor(base)
-                if rc is not None: return rc
-        return None
+    def _parseclass(self,indent):
+        self.scope=self.scope.pop(indent)
+        tokentype, cname, ind = self.next()
+        if tokentype != NAME: return None
+
+        super = []
+        tokentype, next, ind = self.next()
+        if next == '(':
+            super=self._parenparse()
+        elif next != ':': return None
+
+        return Class(cname,super,indent)
 
-    arg_offset = 1
-    if type(func_obj) == types.ClassType: func_obj = _ctor(func_obj)
-    elif type(func_obj) == types.MethodType: func_obj = func_obj.im_func
-    else: arg_offset = 0
-    
-    #dbg(20,"%s, offset=%s" % (str(func_obj), arg_offset))
+    def _parseassignment(self):
+        assign=''
+        tokentype, token, indent = self.next()
+        if tokentype == tokenize.STRING or token == 'str':  
+            return '""'
+        elif token == '[' or token == 'list':
+            return '[]'
+        elif token == '{' or token == 'dict':
+            return '{}'
+        elif tokentype == tokenize.NUMBER:
+            return '0'
+        elif token == 'open' or token == 'file':
+            return 'file'
+        elif token == 'None':
+            return '_PyCmplNoType()'
+        elif token == 'type':
+            return 'type(_PyCmplNoType)' #only for method resolution
+        else:
+            assign += token
+            level = 0
+            while True:
+                tokentype, token, indent = self.next()
+                if token in ('(','{','['):
+                    level += 1
+                elif token in (']','}',')'):
+                    level -= 1
+                    if level == 0: break
+                elif level == 0:
+                    if token in (';','\n'): break
+                    assign += token
+        return "%s" % assign
 
-    arg_text = ''
-    if type(func_obj) in [types.FunctionType, types.LambdaType]:
+    def next(self):
+        type, token, (lineno, indent), end, self.parserline = self.gen.next()
+        if lineno == self.curline:
+            #print 'line found [%s] scope=%s' % (line.replace('\n',''),self.scope.name)
+            self.currentscope = self.scope
+        return (type, token, indent)
+
+    def _adjustvisibility(self):
+        newscope = Scope('result',0)
+        scp = self.currentscope
+        while scp != None:
+            if type(scp) == Function:
+                slice = 0
+                #Handle 'self' params
+                if scp.parent != None and type(scp.parent) == Class:
+                    slice = 1
+                    p = scp.params[0]
+                    i = p.find('=')
+                    if i != -1: p = p[:i]
+                    newscope.local('%s = %s' % (scp.params[0],scp.parent.name))
+                for p in scp.params[slice:]:
+                    i = p.find('=')
+                    if i == -1:
+                        newscope.local('%s = _PyCmplNoType()' % p)
+                    else:
+                        newscope.local('%s = %s' % (p[:i],_sanitize(p[i+1])))
+
+            for s in scp.subscopes:
+                ns = s.copy_decl(0)
+                newscope.add(ns)
+            for l in scp.locals: newscope.local(l)
+            scp = scp.parent
+
+        self.currentscope = newscope
+        return self.currentscope
+
+    #p.parse(vim.current.buffer[:],vim.eval("line('.')"))
+    def parse(self,text,curline=0):
+        self.curline = int(curline)
+        buf = cStringIO.StringIO(''.join(text) + '\n')
+        self.gen = tokenize.generate_tokens(buf.readline)
+        self.currentscope = self.scope
+
         try:
-            cd = func_obj.func_code
-            real_args = cd.co_varnames[arg_offset:cd.co_argcount]
-            defaults = func_obj.func_defaults or []
-            defaults = list(map(lambda name: "=%s" % name, defaults))
-            defaults = [""] * (len(real_args)-len(defaults)) + defaults
-            items = map(lambda a,d: a+d, real_args, defaults)
-            if func_obj.func_code.co_flags & 0x4:
-                items.append("...")
-            if func_obj.func_code.co_flags & 0x8:
-                items.append("***")
-            arg_text = ", ".join(items) + ')'
+            freshscope=True
+            while True:
+                tokentype, token, indent = self.next()
+                #print 'main: token=[%s] indent=[%s]' % (token,indent)
 
-        except:
-            #dbg(1,"exception: %s" % sys.exc_info()[1])
+                if tokentype == DEDENT:
+                    self.scope = self.scope.pop(indent)
+                elif token == 'def':
+                    func = self._parsefunction(indent)
+                    if func == None:
+                        print "function: syntax error..."
+                        continue
+                    freshscope = True
+                    self.scope = self.scope.add(func)
+                elif token == 'class':
+                    cls = self._parseclass(indent)
+                    if cls == None:
+                        print "class: syntax error..."
+                        continue
+                    freshscope = True
+                    self.scope = self.scope.add(cls)
+                    
+                elif token == 'import':
+                    imports = self._parseimportlist()
+                    for mod, alias in imports:
+                        loc = "import %s" % mod
+                        if len(alias) > 0: loc += " as %s" % alias
+                        self.scope.local(loc)
+                    freshscope = False
+                elif token == 'from':
+                    mod, token = self._parsedotname()
+                    if not mod or token != "import":
+                        print "from: syntax error..."
+                        continue
+                    names = self._parseimportlist()
+                    for name, alias in names:
+                        loc = "from %s import %s" % (mod,name)
+                        if len(alias) > 0: loc += " as %s" % alias
+                        self.scope.local(loc)
+                    freshscope = False
+                elif tokentype == STRING:
+                    if freshscope: self.scope.doc(token)
+                elif tokentype == NAME:
+                    name,token = self._parsedotname(token) 
+                    if token == '=':
+                        stmt = self._parseassignment()
+                        if stmt != None:
+                            self.scope.local("%s = %s" % (name,stmt))
+                    freshscope = False
+        except StopIteration: #thrown on EOF
             pass
-    if len(arg_text) == 0:
-        # The doc string sometimes contains the function signature
-        #  this works for alot of C modules that are part of the
-        #  standard library
-        doc = getattr(func_obj, '__doc__', '')
-        if doc:
-            doc = doc.lstrip()
-            pos = doc.find('\n')
-            if pos > 0:
-                sigline = doc[:pos]
-                lidx = sigline.find('(')
-                ridx = sigline.find(')')
-                retidx = sigline.find('->')
-                ret = sigline[retidx+2:].strip()
-                if lidx > 0 and ridx > 0:
-                    arg_text = sigline[lidx+1:ridx] + ')'
-                    if len(ret) > 0: arg_text += ' #returns %s' % ret
-    #dbg(15,"argument completion: %s" % arg_text)
-    return arg_text
+        except:
+            dbg("parse error: %s, %s @ %s" %
+                (sys.exc_info()[0], sys.exc_info()[1], self.parserline))
+        return self._adjustvisibility()
 
-def parse_to_end(gen):
-    stmt=''
+def _sanitize(str):
+    val = ''
     level = 0
-    for type, str, begin, end, line in gen:
-        if line == vim.eval('getline(\'.\')'): break
-        elif str == '\\': continue
-        elif str == ';':
-            break
-        elif type == tokenize.NEWLINE and level == 0:
-            break
-        elif str in ['[','(']:
+    for c in str:
+        if c in ('(','{','['):
             level += 1
-        elif str in [')',']']:
+        elif c in (']','}',')'):
             level -= 1
         elif level == 0:
-            stmt += str
-        #dbg(10,"current statement: %s" % stmt)
-    return stmt
-
-def parse_block(gen):
-    lines = []
-    level = 0
-    for type, str, begin, end, line in gen:
-        if line.replace('\n','') == vim.eval('getline(\'.\')'): break
-        elif type == tokenize.INDENT:
-            level += 1
-        elif type == tokenize.DEDENT:
-            level -= 1
-            if level == 0: break;
-        else:
-            stmt = parse_statement(gen,str)
-            if len(stmt) > 0: lines.append(stmt)
-    return lines
-
-def parse_statement(gen,curstr=''):
-    var = curstr
-    type, str, begin, end, line = gen.next()
-    if str == '=':
-        type, str, begin, end, line = gen.next()
-        if type == tokenize.NEWLINE:
-            return ''
-        elif type == tokenize.STRING or str == 'str':  
-            return '%s = str' % var
-        elif str == '[' or str == 'list':
-            return '%s= list' % var
-        elif str == '{' or str == 'dict':
-            return '%s = dict' % var
-        elif type == tokenize.NUMBER:
-            return '%s = 0' % var
-        elif str == 'Set': 
-            return '%s = Set' % var
-        elif str == 'open' or str == 'file':
-            return '%s = file' % var
-        else:
-            inst = str + parse_to_end(gen)
-            if len(inst) > 0:
-                #dbg(5,"found [%s = %s]" % (var, inst))
-                return '%s = %s' % (var, inst)
-    return ''
-
-def eval_source_code():
-    LINE=vim.eval('getline(\'.\')')
-    s = cStringIO.StringIO('\n'.join(vim.current.buffer[:]) + '\n')
-    g = tokenize.generate_tokens(s.readline)
-
-    stmts = []
-    lineNo = 0
-    try:
-        for type, str, begin, end, line in g:
-            if line.replace('\n','') == vim.eval('getline(\'.\')'): break
-            elif begin[0] == lineNo: continue
-            #junk
-            elif type == tokenize.INDENT or \
-                 type == tokenize.DEDENT or \
-                 type == tokenize.ERRORTOKEN or \
-                 type == tokenize.ENDMARKER or \
-                 type == tokenize.NEWLINE or \
-                 type == tokenize.COMMENT:
-                continue
-            #import statement
-            elif str == 'import':
-                import_stmt=parse_to_end(g)
-                if len(import_stmt) > 0:
-                    #dbg(5,"found [import %s]" % import_stmt)
-                    stmts.append("import %s" % import_stmt)
-            #import from statement
-            elif str == 'from':
-                type, str, begin, end, line = g.next()
-                mod = str
-
-                type, str, begin, end, line = g.next()
-                if str != "import": break
-                from_stmt=parse_to_end(g)
-                if len(from_stmt) > 0:
-                    #dbg(5,"found [from %s import %s]" % (mod, from_stmt))
-                    stmts.append("from %s import %s" % (mod, from_stmt))
-            #def statement
-            elif str == 'def':
-                funcstr = ''
-                for type, str, begin, end, line in g:
-                    if line.replace('\n','') == vim.eval('getline(\'.\')'): break
-                    elif str == ':':
-                        stmts += parse_block(g)
-                        break
-                    funcstr += str
-                if len(funcstr) > 0:
-                    #dbg(5,"found [def %s]" % funcstr)
-                    stmts.append("def %s:\n   pass" % funcstr)
-            #class declaration
-            elif str == 'class':
-                type, str, begin, end, line = g.next()
-                classname = str
-                #dbg(5,"found [class %s]" % classname)
-
-                level = 0
-                members = []
-                for type, str, begin, end, line in g:
-                    if line.replace('\n','') == vim.eval('getline(\'.\')'): break
-                    elif type == tokenize.INDENT:
-                        level += 1
-                    elif type == tokenize.DEDENT:
-                        level -= 1
-                        if level == 0: break;
-                    elif str == 'def':
-                        memberstr = ''
-                        for type, str, begin, end, line in g:
-                            if line.replace('\n','') == vim.eval('getline(\'.\')'): break
-                            elif str == ':':
-                                stmts += parse_block(g)
-                                break
-                            memberstr += str
-                        #dbg(5,"   member [%s]" % memberstr)
-                        members.append(memberstr)
-                classstr = 'class %s:' % classname
-                for m in members:
-                    classstr += ("\n   def %s:\n      pass" % m)
-                stmts.append("%s\n" % classstr)
-            elif keyword.iskeyword(str) or str in globals():
-                #dbg(5,"keyword = %s" % str)
-                lineNo = begin[0]
-            else:
-                assign = parse_statement(g,str)
-                if len(assign) > 0: stmts.append(assign)
-                
-        for s in stmts:
-            try:
-                #dbg(15,"evaluating: %s\n" % s)
-                exec(s) in globals()
-            except:
-                #dbg(1,"exception: %s" % sys.exc_info()[1])
-                pass
-    except:
-        #dbg(1,"exception: %s" % sys.exc_info()[1])
-        pass
-
-def clean_up():
-    for o in globals().keys():
-        if o not in LOCALDEFS:
-            try:
-                exec('del %s' % o) in globals()
-            except: pass
+            val += c
+    return val
 
 sys.path.extend(['.','..'])
 PYTHONEOF
 endfunction
 
-let g:pythoncomplete_debug_level = 0
 call s:DefPython()
 " vim: set et ts=4:
--- a/runtime/autoload/rubycomplete.vim
+++ b/runtime/autoload/rubycomplete.vim
@@ -1,6 +1,6 @@
 " Vim completion script
 " Language:				Ruby
-" Maintainer:			Mark Guzman ( segfault AT hasno DOT info )
+" Maintainer:			Mark Guzman <segfault@hasno.info>
 " Info:					$Id$
 " URL:					http://vim-ruby.rubyforge.org
 " Anon CVS:				See above site
@@ -11,16 +11,64 @@
 " ----------------------------------------------------------------------------
 
 if !has('ruby')
+    echohl ErrorMsg
     echo "Error: Required vim compiled with +ruby"
+    echohl None
     finish
 endif
 
 if version < 700
+    echohl ErrorMsg
     echo "Error: Required vim >= 7.0"
+    echohl None
     finish
 endif
 
-func! GetRubyVarType(v)
+
+function! GetBufferRubyModule(name)
+    let [snum,enum] = GetBufferRubyEntity(a:name, "module")
+    return snum . '..' . enum
+endfunction
+
+function! GetBufferRubyClass(name)
+    let [snum,enum] = GetBufferRubyEntity(a:name, "class")
+    return snum . '..' . enum
+endfunction
+
+function! GetBufferRubySingletonMethods(name)
+endfunction
+
+function! GetBufferRubyEntity( name, type )
+    let stopline = 1
+    let crex = '^\s*' . a:type . '\s*' . a:name . '\s*\(<\s*.*\s*\)\?\n*\(\(\s\|#\).*\n*\)*\n*\s*end$'
+    let [lnum,lcol] = searchpos( crex, 'nbw')
+    if lnum == 0 && lcol == 0
+        return [0,0]
+    endif
+
+    let [enum,ecol] = searchpos( crex, 'nebw')
+    if lnum > enum
+        let realdef = getline( lnum )
+        let crexb = '^' . realdef . '\n*\(\(\s\|#\).*\n*\)*\n*\s*end$'
+        let [enum,ecol] = searchpos( crexb, 'necw' )
+    endif
+    " we found a the class def
+    return [lnum,enum]
+endfunction
+
+function! IsInClassDef()
+    let [snum,enum] = GetBufferRubyEntity( '.*', "class" )
+    let ret = 'nil'
+    let pos = line('.')
+
+    if snum < pos && pos < enum 
+        let ret = snum . '..' . enum
+    endif
+
+    return ret
+endfunction
+
+function! GetRubyVarType(v)
 	let stopline = 1
 	let vtp = ''
 	let pos = getpos('.')
@@ -32,9 +80,9 @@ func! GetRubyVarType(v)
 		return vtp
 	endif
 	call setpos('.',pos)
-	let [lnum,lcol] = searchpos(''.a:v.'\>\s*[+\-*/]*=\s*\([^ \t]\+.\(now\|new\|open\|get_instance\)\>\|[\[{"'']\)','nb',stopline)
+    let [lnum,lcol] = searchpos(''.a:v.'\>\s*[+\-*/]*=\s*\([^ \t]\+.\(now\|new\|open\|get_instance\)\>\|[\[{"''/]\|%r{\)','nb',stopline)
 	if lnum != 0 && lcol != 0
-		let str = matchstr(getline(lnum),'=\s*\([^ \t]\+.\(now\|new\|open\|get_instance\)\>\|[\[{"'']\)',lcol)
+        let str = matchstr(getline(lnum),'=\s*\([^ \t]\+.\(now\|new\|open\|get_instance\)\>\|[\[{"''/]\|%r{\)',lcol)
 		let str = substitute(str,'^=\s*','','')
 		call setpos('.',pos)
 		if str == '"' || str == ''''
@@ -43,6 +91,8 @@ func! GetRubyVarType(v)
 			return 'Array'
 		elseif str == '{'
 			return 'Hash'
+        elseif str == '/' || str == '%r{'
+            return 'Regexp'
 		elseif strlen(str) > 4
             let l = stridx(str,'.')
 			return str[0:l-1]
@@ -51,7 +101,7 @@ func! GetRubyVarType(v)
 	endif
 	call setpos('.',pos)
     return ''
-endf
+endfunction
 
 function! rubycomplete#Complete(findstart, base)
      "findstart = 1 when we need to get the text length
@@ -74,14 +124,20 @@ function! rubycomplete#Complete(findstar
         return idx
     "findstart = 0 when we need to return the list of completions
     else
+        let g:rubycomplete_completions = [] 
         execute "ruby get_completions('" . a:base . "')"
-        return g:rbcomplete_completions
+        return g:rubycomplete_completions
     endif
 endfunction
 
 
 function! s:DefRuby()
 ruby << RUBYEOF
+RailsWords = [
+      "has_many", "has_one",
+      "belongs_to",
+    ]
+
 ReservedWords = [
       "BEGIN", "END",
       "alias", "and",
@@ -106,188 +162,290 @@ Operators = [ "%", "&", "*", "**", "+", 
       "<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>",
       "[]", "[]=", "^", ]
 
-def identify_type(var)
-    @buf = VIM::Buffer.current
-    enum = @buf.line_number
-    snum = (enum-10).abs
-    nums = Range.new( snum, enum )
-    regxs = '/.*(%s)\s*=(.*)/' % var
-    regx = Regexp.new( regxs )
-    nums.each do |x|
-        ln = @buf[x]
-        #print $~ if regx.match( ln )
+
+def load_requires
+  @buf = VIM::Buffer.current
+  enum = @buf.line_number
+  nums = Range.new( 1, enum )
+  nums.each do |x|
+    ln = @buf[x]
+    begin
+      eval( "require %s" % $1 ) if /.*require\s*(.*)$/.match( ln )
+    rescue Exception
+      #ignore?
     end
+  end
+end
+
+def load_buffer_class(name)
+  classdef = get_buffer_entity(name, 'GetBufferRubyClass("%s")')
+  return if classdef == nil
+
+  pare = /^\s*class\s*(.*)\s*<\s*(.*)\s*\n/.match( classdef )
+  load_buffer_class( $2 ) if pare != nil
+
+  mixre = /.*\n\s*include\s*(.*)\s*\n/.match( classdef )
+  load_buffer_module( $2 ) if mixre != nil
+
+  eval classdef 
+end
+
+def load_buffer_module(name)
+  classdef = get_buffer_entity(name, 'GetBufferRubyModule("%s")')
+  return if classdef == nil
+
+  eval classdef 
 end
 
-def load_requires
-    @buf = VIM::Buffer.current
-    enum = @buf.line_number
-    nums = Range.new( 1, enum )
-    nums.each do |x|
-        ln = @buf[x]
-        begin
-            eval( "require %s" % $1 ) if /.*require\s*(.*)$/.match( ln )
-        rescue Exception
-            #ignore?
-        end
+def get_buffer_entity(name, vimfun)
+  @buf = VIM::Buffer.current
+  nums = eval( VIM::evaluate( vimfun % name ) )
+  return nil if nums == nil 
+  return nil if nums.min == nums.max && nums.min == 0
+  
+  cur_line = VIM::Buffer.current.line_number
+  classdef = ""
+  nums.each do |x|
+    if x != cur_line
+      ln = @buf[x] 
+      classdef += "%s\n" % ln
     end
+  end
+ 
+  return classdef
+end
+
+def load_rails()
+  allow_rails = VIM::evaluate('g:rubycomplete_rails')
+  return if allow_rails != '1'
+  
+  buf_path = VIM::evaluate('expand("%:p")')
+  file_name = VIM::evaluate('expand("%:t")')
+  path = buf_path.gsub( file_name, '' ) 
+  path.gsub!( /\\/, "/" )
+  pup = [ "../", "../../", "../../../", "../../../../" ]
+  pok = nil
+
+  pup.each do |sup|
+    tpok = "%s%sconfig" % [ path, sup ]
+    if File.exists?( tpok )
+        pok = tpok
+        break
+    end
+  end
+  bootfile = pok + "/boot.rb"
+  require bootfile if pok != nil && File.exists?( bootfile )
+end
+
+def get_rails_helpers
+  allow_rails = VIM::evaluate('g:rubycomplete_rails')
+  return [] if allow_rails != '1'
+  return RailsWords 
 end
 
 def get_completions(base)
-    load_requires
-    input = VIM::evaluate('expand("<cWORD>")')
-    input += base
-    message = nil
+  load_requires
+  load_rails
+
+  input = VIM::evaluate('expand("<cWORD>")')
+  input += base
+  input.lstrip!
+  if input.length == 0
+    input = VIM::Buffer.current.line
+    input.strip!
+  end
+  message = nil
 
 
-    case input
-      when /^(\/[^\/]*\/)\.([^.]*)$/
-        # Regexp
-        receiver = $1
-        message = Regexp.quote($2)
+  case input
+    when /^(\/[^\/]*\/)\.([^.]*)$/
+      # Regexp
+      receiver = $1
+      message = Regexp.quote($2)
+
+      candidates = Regexp.instance_methods(true)
+      select_message(receiver, message, candidates)
 
-        candidates = Regexp.instance_methods(true)
-        select_message(receiver, message, candidates)
+    when /^([^\]]*\])\.([^.]*)$/
+      # Array
+      receiver = $1
+      message = Regexp.quote($2)
+
+      candidates = Array.instance_methods(true)
+      select_message(receiver, message, candidates)
+
+    when /^([^\}]*\})\.([^.]*)$/
+      # Proc or Hash
+      receiver = $1
+      message = Regexp.quote($2)
 
-      when /^([^\]]*\])\.([^.]*)$/
-        # Array
-        receiver = $1
-        message = Regexp.quote($2)
+      candidates = Proc.instance_methods(true) | Hash.instance_methods(true)
+      select_message(receiver, message, candidates)
 
-        candidates = Array.instance_methods(true)
-        select_message(receiver, message, candidates)
+    when /^(:[^:.]*)$/
+      # Symbol
+      if Symbol.respond_to?(:all_symbols)
+        sym = $1
+        candidates = Symbol.all_symbols.collect{|s| ":" + s.id2name}
+        candidates.grep(/^#{sym}/)
+        candidates.delete_if do |c|
+            c.match( /'/ )
+        end
+        candidates.uniq!
+        candidates.sort!
+      else
+        []
+      end
 
-      when /^([^\}]*\})\.([^.]*)$/
-        # Proc or Hash
-        receiver = $1
-        message = Regexp.quote($2)
+    when /^::([A-Z][^:\.\(]*)$/
+      # Absolute Constant or class methods
+      receiver = $1
+      candidates = Object.constants
+      candidates.grep(/^#{receiver}/).collect{|e| "::" + e}
 
-        candidates = Proc.instance_methods(true) | Hash.instance_methods(true)
-        select_message(receiver, message, candidates)
+    when /^(((::)?[A-Z][^:.\(]*)+)::?([^:.]*)$/
+      # Constant or class methods
+      receiver = $1
+      message = Regexp.quote($4)
+      begin
+        candidates = eval("#{receiver}.constants | #{receiver}.methods")
+      rescue Exception
+        candidates = []
+      end
+      candidates.grep(/^#{message}/).collect{|e| receiver + "::" + e}
 
-      when /^(:[^:.]*)$/
-        # Symbol
-        if Symbol.respond_to?(:all_symbols)
-          sym = $1
-          candidates = Symbol.all_symbols.collect{|s| ":" + s.id2name}
-          candidates.grep(/^#{sym}/)
-        else
-          []
-        end
+    when /^(:[^:.]+)\.([^.]*)$/
+      # Symbol
+      receiver = $1
+      message = Regexp.quote($2)
+
+      candidates = Symbol.instance_methods(true)
+      select_message(receiver, message, candidates)
+
+    when /^([0-9_]+(\.[0-9_]+)?(e[0-9]+)?)\.([^.]*)$/
+      # Numeric
+      receiver = $1
+      message = Regexp.quote($4)
 
-      when /^::([A-Z][^:\.\(]*)$/
-        # Absolute Constant or class methods
-        receiver = $1
-        candidates = Object.constants
-        candidates.grep(/^#{receiver}/).collect{|e| "::" + e}
+      begin
+        candidates = eval(receiver).methods
+      rescue Exception
+        candidates
+      end
+      select_message(receiver, message, candidates)
+
+    when /^(\$[^.]*)$/
+	  candidates = global_variables.grep(Regexp.new(Regexp.quote($1)))
 
-      when /^(((::)?[A-Z][^:.\(]*)+)::?([^:.]*)$/
-        # Constant or class methods
-        receiver = $1
-        message = Regexp.quote($4)
+#   when /^(\$?(\.?[^.]+)+)\.([^.]*)$/
+    when /^((\.?[^.]+)+)\.([^.]*)$/
+      # variable
+      receiver = $1
+      message = Regexp.quote($3)
+      load_buffer_class( receiver )
+
+      cv = eval("self.class.constants")
+
+      vartype = VIM::evaluate("GetRubyVarType('%s')" % receiver)
+      if vartype != ''
+        load_buffer_class( vartype )
+
         begin
-          candidates = eval("#{receiver}.constants | #{receiver}.methods")
+          candidates = eval("#{vartype}.instance_methods")
         rescue Exception
           candidates = []
         end
-        candidates.grep(/^#{message}/).collect{|e| receiver + "::" + e}
-
-      when /^(:[^:.]+)\.([^.]*)$/
-        # Symbol
-        receiver = $1
-        message = Regexp.quote($2)
-
-        candidates = Symbol.instance_methods(true)
-        select_message(receiver, message, candidates)
-
-      when /^([0-9_]+(\.[0-9_]+)?(e[0-9]+)?)\.([^.]*)$/
-        # Numeric
-        receiver = $1
-        message = Regexp.quote($4)
-
+      elsif (cv).include?(receiver)
+        # foo.func and foo is local var.
+        candidates = eval("#{receiver}.methods")
+      elsif /^[A-Z]/ =~ receiver and /\./ !~ receiver
+        # Foo::Bar.func
         begin
-          candidates = eval(receiver).methods
+          candidates = eval("#{receiver}.methods")
         rescue Exception
-          candidates
+          candidates = []
         end
-        select_message(receiver, message, candidates)
-
-      when /^(\$[^.]*)$/
-	      candidates = global_variables.grep(Regexp.new(Regexp.quote($1)))
-
-#      when /^(\$?(\.?[^.]+)+)\.([^.]*)$/
-      when /^((\.?[^.]+)+)\.([^.]*)$/
-        # variable
-        receiver = $1
-        message = Regexp.quote($3)
-
-        cv = eval("self.class.constants")
-
-        vartype = VIM::evaluate("GetRubyVarType('%s')" % receiver)
-        if vartype != ''
-          candidates = eval("#{vartype}.instance_methods")
-        elsif (cv).include?(receiver)
-          # foo.func and foo is local var.
-          candidates = eval("#{receiver}.methods")
-        elsif /^[A-Z]/ =~ receiver and /\./ !~ receiver
-          # Foo::Bar.func
-          begin
-            candidates = eval("#{receiver}.methods")
-          rescue Exception
-            candidates = []
-          end
-        else
-          # func1.func2
-          candidates = []
-          ObjectSpace.each_object(Module){|m|
-            next if m.name != "IRB::Context" and
-              /^(IRB|SLex|RubyLex|RubyToken)/ =~ m.name
-            candidates.concat m.instance_methods(false)
-          }
-          candidates.sort!
-          candidates.uniq!
-        end
-        #identify_type( receiver )
-        select_message(receiver, message, candidates)
+      else
+        # func1.func2
+        candidates = []
+        ObjectSpace.each_object(Module){|m|
+          next if m.name != "IRB::Context" and
+            /^(IRB|SLex|RubyLex|RubyToken)/ =~ m.name
+          candidates.concat m.instance_methods(false)
+        }
+        candidates.sort!
+        candidates.uniq!
+      end
+      #identify_type( receiver )
+      select_message(receiver, message, candidates)
 
     #when /^((\.?[^.]+)+)\.([^.]*)\(\s*\)*$/
         #function call
         #obj = $1
         #func = $3
 
-      when /^\.([^.]*)$/
+    when /^\.([^.]*)$/
 	# unknown(maybe String)
 
-        receiver = ""
-        message = Regexp.quote($1)
+      receiver = ""
+      message = Regexp.quote($1)
+
+      candidates = String.instance_methods(true)
+      select_message(receiver, message, candidates)
+
+  else
+    inclass = eval( VIM::evaluate("IsInClassDef()") )
 
-        candidates = String.instance_methods(true)
+    if inclass != nil
+      classdef = "%s\n" % VIM::Buffer.current[ inclass.min ] 
+      found = /^\s*class\s*([A-Za-z0-9_-]*)(\s*<\s*([A-Za-z0-9_:-]*))?\s*\n$/.match( classdef )
+
+      if found != nil
+        receiver = $1
+        message = input
+        load_buffer_class( receiver )
+        candidates = eval( "#{receiver}.instance_methods" )
+        candidates += get_rails_helpers
         select_message(receiver, message, candidates)
-
-    else
+      end
+    end
+    
+    if inclass == nil || found == nil
       candidates = eval("self.class.constants")
-
       (candidates|ReservedWords).grep(/^#{Regexp.quote(input)}/)
     end
+  end
 
     #print candidates
-    if message != nil && message.length > 0
-        rexp = '^%s' % message.downcase
-        candidates.delete_if do |c|
-            c.downcase.match( rexp )
-            $~ == nil
-        end
+  if message != nil && message.length > 0
+    rexp = '^%s' % message.downcase
+    candidates.delete_if do |c|
+        c.downcase.match( rexp )
+        $~ == nil
     end
+  end
 
+  outp = ""
+
+  #    tags = VIM::evaluate("taglist('^%s$')" %
+  valid = (candidates-Object.instance_methods)
+  
+  rg = 0..valid.length
+  rg.step(150) do |x|
+    stpos = 0+x
+    enpos = 150+x
+    valid[stpos..enpos].each { |c| outp += "{'word':'%s','item':'%s'}," % [ c, c ] }
+    outp.sub!(/,$/, '')
+
+    VIM::command("call extend(g:rubycomplete_completions, [%s])" % outp)
     outp = ""
-    #    tags = VIM::evaluate("taglist('^%s$')" %
-    (candidates-Object.instance_methods).each { |c| outp += "{'word':'%s','item':'%s'}," % [ c, c ] }
-    outp.sub!(/,$/, '')
-    VIM::command("let g:rbcomplete_completions = [%s]" % outp)
+  end
 end
 
 
 def select_message(receiver, message, candidates)
+  #tags = VIM::evaluate("taglist('%s')" % receiver)
+  #print tags
   candidates.grep(/^#{message}/).collect do |e|
     case e
       when /^[a-zA-Z_]/
@@ -304,5 +462,7 @@ end
 RUBYEOF
 endfunction
 
+
+let g:rubycomplete_rails = 0
 call s:DefRuby()
 " vim: set et ts=4:
--- a/runtime/autoload/xml/xhtml10s.vim
+++ b/runtime/autoload/xml/xhtml10s.vim
@@ -1,7 +1,314 @@
-" HTML context data
-"function! htmlcomplete#LoadData() " {{{
 let g:xmldata_xhtml10s = {
 \ 'vimxmlentities' : ["AElig", "Aacute", "Acirc", "Agrave", "Alpha", "Aring", "Atilde", "Auml", "Beta", "Ccedil", "Chi", "Dagger", "Delta", "ETH", "Eacute", "Ecirc", "Egrave", "Epsilon", "Eta", "Euml", "Gamma", "Iacute", "Icirc", "Igrave", "Iota", "Iuml", "Kappa", "Lambda", "Mu", "Ntilde", "Nu", "OElig", "Oacute", "Ocirc", "Ograve", "Omega", "Omicron", "Oslash", "Otilde", "Ouml", "Phi", "Pi", "Prime", "Psi", "Rho", "Scaron", "Sigma", "THORN", "TITY", "Tau", "Theta", "Uacute", "Ucirc", "Ugrave", "Upsilon", "Uuml", "Xi", "Yacute", "Yuml", "Zeta", "amp", "aacute", "acirc", "acute", "aelig", "agrave", "alefsym", "alpha", "and", "ang", "apos", "aring", "asymp", "atilde", "auml", "bdquo", "beta", "brvbar", "bull", "cap", "ccedil", "cedil", "cent", "chi", "circ", "clubs", "copy", "cong", "crarr", "cup", "curren", "dArr", "dagger", "darr", "deg", "delta", "diams", "divide", "eacute", "ecirc", "egrave", "empty", "ensp", "emsp", "epsilon", "equiv", "eta", "eth", "euro", "euml", "exist", "fnof", "forall", "frac12", "frac14", "frac34", "frasl", "gt", "gamma", "ge", "hArr", "harr", "hearts", "hellip", "iacute", "icirc", "iexcl", "igrave", "image", "infin", "int", "iota", "iquest", "isin", "iuml", "kappa", "lt", "laquo", "lArr", "lambda", "lang", "larr", "lceil", "ldquo", "le", "lfloor", "lowast", "loz", "lrm", "lsaquo", "lsquo", "macr", "mdash", "micro", "middot", "minus", "mu", "nbsp", "nabla", "ndash", "ne", "ni", "not", "notin", "nsub", "ntilde", "nu", "oacute", "ocirc", "oelig", "ograve", "oline", "omega", "omicron", "oplus", "or", "ordf", "ordm", "oslash", "otilde", "otimes", "ouml", "para", "part", "permil", "perp", "phi", "pi", "piv", "plusmn", "pound", "prime", "prod", "prop", "psi", "quot", "rArr", "raquo", "radic", "rang", "rarr", "rceil", "rdquo", "real", "reg", "rfloor", "rho", "rlm", "rsaquo", "rsquo", "sbquo", "scaron", "sdot", "sect", "shy", "sigma", "sigmaf", "sim", "spades", "sub", "sube", "sum", "sup", "sup1", "sup2", "sup3", "supe", "szlig", "tau", "there4", "theta", "thetasym", "thinsp", "thorn", "tilde", "times", "trade", "uArr", "uacute", "uarr", "ucirc", "ugrave", "uml", "upsih", "upsilon", "uuml", "weierp", "xi", "yacute", "yen", "yuml", "zeta", "zwj", "zwnj"],
+\ 'vimxmlroot': ['html'],
+\ 'a': [
+\ ['br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'accesskey': [], 'rel': [], 'coords': [], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onblur': [], 'onfocus': [], 'onkeydown': [], 'onkeyup': [], 'href': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'tabindex': [], 'onmouseout': [], 'onmousemove': [], 'name': [], 'style': [], 'charset': [], 'xml:lang': [], 'hreflang': [], 'onkeypress': [], 'onmousedown': [], 'rev': [], 'class': [], 'title': [], 'onclick': [], 'type': [], 'shape': ['rect', 'rect', 'circle', 'poly', 'default']}
+\ ],
+\ 'abbr': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'acronym': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'address': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'area': [
+\ [],
+\ { 'accesskey': [], 'coords': [], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onblur': [], 'onkeydown': [], 'onfocus': [], 'nohref': ['BOOL'], 'onkeyup': [], 'href': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'tabindex': [], 'lang': [], 'alt': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'shape': ['rect', 'rect', 'circle', 'poly', 'default']}
+\ ],
+\ 'b': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'base': [
+\ [],
+\ { 'href': [], 'id': []}
+\ ],
+\ 'bdo': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'big': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'blockquote': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'form', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'cite': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'body': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'form', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onunload': [], 'onkeypress': [], 'onmousedown': [], 'onload': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'br': [
+\ [],
+\ { 'id': [], 'style': [], 'class': [], 'title': []}
+\ ],
+\ 'button': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'table', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'noscript', 'ins', 'del', 'script'],
+\ { 'accesskey': [], 'disabled': ['BOOL'], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onblur': [], 'onkeydown': [], 'onfocus': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'tabindex': [], 'lang': [], 'value': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'name': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'type': ['submit', 'button', 'submit', 'reset']}
+\ ],
+\ 'caption': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'cite': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'code': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'col': [
+\ [],
+\ { 'width': [], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'charoff': [], 'onmouseover': [], 'lang': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'char': [], 'span': ['1'], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'colgroup': [
+\ ['col'],
+\ { 'width': [], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'charoff': [], 'onmouseover': [], 'lang': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'char': [], 'span': ['1'], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'dd': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'del': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'datetime': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'cite': [], 'onmouseover': [], 'lang': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'dfn': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'div': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'dl': [
+\ ['dt', 'dd'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'dt': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'em': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'fieldset': [
+\ ['legend', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'form': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'noscript', 'ins', 'del', 'script'],
+\ { 'enctype': ['application/x-www-form-urlencoded'], 'onsubmit': [], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'onreset': [], 'id': [], 'method': ['get', 'get', 'post'], 'onmouseover': [], 'lang': [], 'accept': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'accept-charset': [], 'onkeypress': [], 'onmousedown': [], 'action': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'h1': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'h2': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'h3': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'h4': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'h5': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'h6': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'head': [
+\ ['script', 'style', 'meta', 'link', 'object', 'title', 'script', 'style', 'meta', 'link', 'object', 'base', 'script', 'style', 'meta', 'link', 'object', 'base', 'script', 'style', 'meta', 'link', 'object', 'title', 'script', 'style', 'meta', 'link', 'object'],
+\ { 'profile': [], 'dir': ['ltr', 'rtl'], 'id': [], 'lang': [], 'xml:lang': []}
+\ ],
+\ 'hr': [
+\ [],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'html': [
+\ ['head', 'body'],
+\ { 'xmlns': ['http://www.w3.org/1999/xhtml'], 'dir': ['ltr', 'rtl'], 'id': [], 'lang': [], 'xml:lang': []}
+\ ],
+\ 'i': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'img': [
+\ [],
+\ { 'width': [], 'usemap': [], 'ismap': ['BOOL'], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'alt': [], 'lang': [], 'src': [], 'longdesc': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'height': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'input': [
+\ [],
+\ { 'ondblclick': [], 'onkeydown': [], 'readonly': ['BOOL'], 'onchange': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'value': [], 'src': [], 'name': [], 'checked': ['BOOL'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'type': ['text', 'text', 'password', 'checkbox', 'radio', 'submit', 'reset', 'file', 'hidden', 'image', 'button'], 'accesskey': [], 'disabled': ['BOOL'], 'usemap': [], 'dir': ['ltr', 'rtl'], 'onblur': [], 'size': [], 'onfocus': [], 'maxlength': [], 'onselect': [], 'accept': [], 'tabindex': [], 'alt': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'ins': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'datetime': [], 'cite': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'kbd': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'label': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'for': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'accesskey': [], 'dir': ['ltr', 'rtl'], 'onblur': [], 'onfocus': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'legend': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'accesskey': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'li': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'link': [
+\ [],
+\ { 'rel': [], 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'href': [], 'media': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'charset': [], 'hreflang': [], 'onkeypress': [], 'onmousedown': [], 'rev': [], 'class': [], 'title': [], 'onclick': [], 'type': [], 'dir': ['ltr', 'rtl'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'map': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'form', 'noscript', 'ins', 'del', 'script', 'area'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'name': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'onclick': [], 'title': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmouseout': [], 'onmousemove': [], 'xml:lang': []}
+\ ],
+\ 'meta': [
+\ [],
+\ { 'http-equiv': [], 'content': [], 'id': [], 'lang': [], 'name': [], 'scheme': [], 'dir': ['ltr', 'rtl'], 'xml:lang': []}
+\ ],
+\ 'noscript': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'form', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'object': [
+\ ['param', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'name': [], 'data': [], 'declare': ['BOOL'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'type': [], 'width': [], 'usemap': [], 'dir': ['ltr', 'rtl'], 'archive': [], 'standby': [], 'tabindex': [], 'classid': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'height': [], 'codetype': [], 'codebase': []}
+\ ],
+\ 'ol': [
+\ ['li'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'optgroup': [
+\ ['option'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'label': [], 'disabled': ['BOOL'], 'dir': ['ltr', 'rtl'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'option': [
+\ [''],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'value': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'label': [], 'disabled': ['BOOL'], 'dir': ['ltr', 'rtl'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'selected': ['BOOL']}
+\ ],
+\ 'p': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'param': [
+\ [],
+\ { 'id': [], 'value': [], 'name': [], 'type': [], 'valuetype': ['data', 'data', 'ref', 'object']}
+\ ],
+\ 'pre': [
+\ ['a', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'br', 'span', 'bdo', 'map', 'ins', 'del', 'script', 'input', 'select', 'textarea', 'label', 'button'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'xml:space': ['preserve', 'preserve'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'q': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'cite': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'samp': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'script': [
+\ [''],
+\ { 'id': [], 'src': [], 'charset': [], 'xml:space': ['preserve', 'preserve'], 'type': ['text/javascript'], 'defer': ['BOOL']}
+\ ],
+\ 'select': [
+\ ['optgroup', 'option'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onchange': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'name': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'disabled': ['BOOL'], 'dir': ['ltr', 'rtl'], 'size': [], 'onblur': [], 'onfocus': [], 'tabindex': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'multiple': ['BOOL']}
+\ ],
+\ 'small': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'span': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'strong': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'style': [
+\ [''],
+\ { 'media': [], 'id': [], 'lang': [], 'xml:space': ['preserve', 'preserve'], 'title': [], 'type': ['text/css'], 'dir': ['ltr', 'rtl'], 'xml:lang': []}
+\ ],
+\ 'sub': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'sup': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'table': [
+\ ['caption', 'col', 'colgroup', 'thead', 'tfoot', 'tbody', 'tr'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'width': [], 'frame': ['void', 'above', 'below', 'hsides', 'lhs', 'rhs', 'vsides', 'box', 'border'], 'rules': ['none', 'groups', 'rows', 'cols', 'all'], 'dir': ['ltr', 'rtl'], 'summary': [], 'cellspacing': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'border': [], 'cellpadding': []}
+\ ],
+\ 'tbody': [
+\ ['tr'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'lang': [], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'charoff': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'char': []}
+\ ],
+\ 'td': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'axis': [], 'onkeydown': [], 'abbr': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'scope': ['row', 'col', 'rowgroup', 'colgroup'], 'onmouseover': [], 'lang': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'headers': [], 'dir': ['ltr', 'rtl'], 'rowspan': ['1'], 'colspan': ['1'], 'charoff': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'char': []}
+\ ],
+\ 'textarea': [
+\ [''],
+\ { 'ondblclick': [], 'cols': [], 'onkeydown': [], 'readonly': ['BOOL'], 'onchange': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'name': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'accesskey': [], 'disabled': ['BOOL'], 'rows': [], 'dir': ['ltr', 'rtl'], 'onblur': [], 'onfocus': [], 'onselect': [], 'tabindex': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'tfoot': [
+\ ['tr'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'lang': [], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'charoff': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'char': []}
+\ ],
+\ 'th': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'pre', 'hr', 'blockquote', 'address', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'axis': [], 'onkeydown': [], 'abbr': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'scope': ['row', 'col', 'rowgroup', 'colgroup'], 'onmouseover': [], 'lang': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'headers': [], 'dir': ['ltr', 'rtl'], 'rowspan': ['1'], 'colspan': ['1'], 'charoff': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'char': []}
+\ ],
+\ 'thead': [
+\ ['tr'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'lang': [], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'charoff': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'char': []}
+\ ],
+\ 'title': [
+\ [''],
+\ { 'id': [], 'lang': [], 'dir': ['ltr', 'rtl'], 'xml:lang': []}
+\ ],
+\ 'tr': [
+\ ['th', 'td'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'lang': [], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'charoff': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'char': []}
+\ ],
+\ 'tt': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'ul': [
+\ ['li'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'var': [
+\ ['a', 'br', 'span', 'bdo', 'map', 'object', 'img', 'tt', 'i', 'b', 'big', 'small', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
 \ 'vimxmlattrinfo' : {
 \ 'accept' : ['ContentType', ''],
 \ 'accesskey' : ['Character', ''],
@@ -88,3988 +395,17 @@ let g:xmldata_xhtml10s = {
 \ 'width' : ['Number', ''],
 \ 'xmlns' : ['URI', '']
 \ },
-\ 'vimxmltaginfo' : {
-\ 'base' : ['/>', ''],
-\ 'meta' : ['/>', ''],
-\ 'link' : ['/>', ''],
-\ 'img' : ['/>', ''],
-\ 'hr' : ['/>', ''],
-\ 'br' : ['/>', ''],
-\ 'param' : ['/>', ''],
-\ 'area' : ['/>', ''],
-\ 'input' : ['/>', ''],
-\ 'col' : ['/>', '']
-\ },
-\ 'tr' : [
-\ [
-\ 'th',
-\ 'td'
-\ ],
-\ {
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'charoff' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'align' : [
-\ 'left',
-\ 'center',
-\ 'right',
-\ 'justify',
-\ 'char'
-\ ],
-\ 'valign' : [
-\ 'top',
-\ 'middle',
-\ 'bottom',
-\ 'baseline'
-\ ],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'char' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'input' : [[],
-\ {
-\ 'ondblclick' : [],
-\ 'onchange' : [],
-\ 'readonly' : [
-\  'BOOL'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'src' : [],
-\ 'value' : [],
-\ 'name' : [],
-\ 'checked' : [
-\ 'BOOL'
-\ ],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : [],
-\ 'type' : [
-\ 'text',
-\ 'password',
-\ 'checkbox',
-\ 'radio',
-\ 'submit',
-\ 'reset',
-\ 'file',
-\ 'hidden',
-\ 'image',
-\ 'button'
-\ ],
-\ 'accesskey' : [],
-\ 'disabled' : [
-\  'BOOL'
-\ ],
-\ 'usemap' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'size' : [],
-\ 'onblur' : [],
-\ 'onfocus' : [],
-\ 'maxlength' : [],
-\ 'onselect' : [],
-\ 'accept' : [],
-\ 'alt' : [],
-\ 'tabindex' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'xml:lang' : []
-\ }
-\ ],
-\ 'table' : [
-\ [
-\ 'caption',
-\ 'col',
-\ 'colgroup',
-\ 'thead',
-\ 'tfoot',
-\ 'tbody',
-\ 'tr'
-\ ],
-\ {
-\ 'width' : [],
-\ 'frame' : [
-\ 'void',
-\ 'above',
-\ 'below',
-\ 'hsides',
-\ 'lhs',
-\ 'rhs',
-\ 'vsides',
-\ 'box',
-\ 'border'
-\ ],
-\ 'ondblclick' : [],
-\ 'rules' : [
-\ 'none',
-\ 'groups',
-\ 'rows',
-\ 'cols',
-\ 'all'
-\ ],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'summary' : [],
-\ 'onkeyup' : [],
-\ 'cellspacing' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'border' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'cellpadding' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'form' : [
-\ [
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onsubmit' : [],
-\ 'enctype' : [
-\ '',
-\ 'application/x-www-form-urlencoded',
-\ ],
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onreset' : [],
-\ 'onmouseup' : [],
-\ 'method' : [
-\ 'get',
-\ 'post'
-\ ],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'accept' : [],
-\ 'lang' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'accept-charset' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'action' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'h5' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'meta' : [[],
-\ {
-\ 'http-equiv' : [],
-\ 'lang' : [],
-\ 'name' : [],
-\ 'scheme' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ]
-\ }
-\ ],
-\ 'map' : [
-\ [
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'form',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript',
-\ 'area'
-\ ],
-\ {
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'name' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'style' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'title' : [],
-\ 'onclick' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'tfoot' : [
-\ [
-\ 'tr'
-\ ],
-\ {
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'charoff' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'align' : [
-\ 'left',
-\ 'center',
-\ 'right',
-\ 'justify',
-\ 'char'
-\ ],
-\ 'valign' : [
-\ 'top',
-\ 'middle',
-\ 'bottom',
-\ 'baseline'
-\ ],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'char' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'caption' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'code' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'base' : [[],
-\ {
-\ 'href' : []
-\ }
-\ ],
-\ 'br' : [[],
-\ {
-\ 'style' : [],
-\ 'title' : [],
-\ 'class' : [],
-\ 'id' : []
-\ }
-\ ],
-\ 'acronym' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'strong' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'h4' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'em' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'b' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'q' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : [],
-\ 'cite' : []
-\ }
-\ ],
-\ 'span' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'title' : [
-\ {
-\ 'lang' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ]
-\ }
-\ ],
-\ 'small' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'area' : [[],
-\ {
-\ 'accesskey' : [],
-\ 'coords' : [],
-\ 'ondblclick' : [],
-\ 'onblur' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onfocus' : [],
-\ 'nohref' : [
-\ 'BOOL'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'href' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'tabindex' : [],
-\ 'alt' : [],
-\ 'lang' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : [],
-\ 'shape' : [
-\ 'rect',
-\ 'circle',
-\ 'poly',
-\ 'default'
-\ ]
-\ }
-\ ],
-\ 'body' : [
-\ [
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'form',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'onunload' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onload' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'ol' : [
-\ [
-\ 'li'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'html' : [
-\ [
-\ 'head',
-\ 'body'
-\ ],
-\ {
-\ 'xmlns' : [
-\ 'http://www.w3.org/1999/xhtml',
-\ ],
-\ 'lang' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ]
-\ }
-\ ],
-\ 'var' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'ul' : [
-\ [
-\ 'li'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'del' : [
-\ [
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'form',
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'ondblclick' : [],
-\ 'datetime' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'cite' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'blockquote' : [
-\ [
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'form',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\  'ltr',
-\  'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : [],
-\ 'cite' : []
-\ }
-\ ],
-\ 'style' : [[],
-\ {
-\ 'lang' : [],
-\ 'media' : [
-\ 'screen',
-\ 'tty',
-\ 'tv',
-\ 'projection',
-\ 'handheld',
-\ 'print',
-\ 'braille',
-\ 'aural',
-\ 'all'
-\ ],
-\ 'title' : [],
-\ 'type' : [
-\ 'text/css'
-\ ],
-\ 'xml:space' : [
-\ 'preserve'
-\ ],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ]
-\ }
-\ ],
-\ 'dfn' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'h3' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'textarea' : [[], 
-\ {
-\ 'accesskey' : [],
-\ 'disabled' : [
-\ 'disabled'
-\ ],
-\ 'ondblclick' : [],
-\ 'rows' : [],
-\ 'onblur' : [],
-\ 'cols' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onchange' : [],
-\ 'onfocus' : [],
-\ 'readonly' : [
-\ 'BOOL'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onselect' : [],
-\ 'onmouseover' : [],
-\ 'tabindex' : [],
-\ 'lang' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'name' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'a' : [
-\ [
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'accesskey' : [],
-\ 'rel' : [],
-\ 'coords' : [],
-\ 'ondblclick' : [],
-\ 'onblur' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onfocus' : [],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'href' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'tabindex' : [],
-\ 'lang' : [],
-\ 'name' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'charset' : [],
-\ 'hreflang' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'rev' : [],
-\ 'shape' : [
-\ 'rect',
-\ 'circle',
-\ 'poly',
-\ 'default'
-\ ],
-\ 'type' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'img' : [[],
-\ {
-\ 'width' : [],
-\ 'ismap' : [
-\ 'BOOL'
-\ ],
-\ 'usemap' : [],
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'alt' : [],
-\ 'longdesc' : [],
-\ 'src' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'height' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'tt' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'thead' : [
-\ [
-\ 'tr'
-\ ],
-\ {
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'charoff' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'align' : [
-\ 'left',
-\ 'center',
-\ 'right',
-\ 'justify',
-\ 'char'
-\ ],
-\ 'valign' : [
-\ 'top',
-\ 'middle',
-\ 'bottom',
-\ 'baseline'
-\ ],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'char' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'abbr' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'h6' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'sup' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
+\ 'vimxmltaginfo': {
+\ 'area': ['/>', ''],
+\ 'base': ['/>', ''],
+\ 'br': ['/>', ''],
+\ 'col': ['/>', ''],
+\ 'hr': ['/>', ''],
+\ 'img': ['/>', ''],
+\ 'input': ['/>', ''],
+\ 'link': ['/>', ''],
+\ 'meta': ['/>', ''],
+\ 'param': ['/>', ''],
 \ }
-\ ],
-\ 'address' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
 \ }
-\ ],
-\ 'param' : [[],
-\ {
-\ 'value' : [],
-\ 'name' : [],
-\ 'type' : [],
-\ 'valuetype' : [
-\ 'data',
-\ 'ref',
-\ 'object'
-\ ],
-\ 'id' : []
-\ }
-\ ],
-\ 'th' : [
-\ [
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'form',
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'headers' : [],
-\ 'ondblclick' : [],
-\ 'axis' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'abbr' : [],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'h1' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'head' : [
-\ [
-\ 'script',
-\ 'style',
-\ 'meta',
-\ 'link',
-\ 'object',
-\ 'title',
-\ 'script',
-\ 'style',
-\ 'meta',
-\ 'link',
-\ 'object',
-\ 'base',
-\ 'script',
-\ 'style',
-\ 'meta',
-\ 'link',
-\ 'object',
-\ 'base',
-\ 'script',
-\ 'style',
-\ 'meta',
-\ 'link',
-\ 'object',
-\ 'title',
-\ 'script',
-\ 'style',
-\ 'meta',
-\ 'link',
-\ 'object'
-\ ],
-\ {
-\ 'profile' : [],
-\ 'lang' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ]
-\ }
-\ ],
-\ 'tbody' : [
-\ [
-\ 'tr'
-\ ],
-\ {
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'charoff' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'align' : [
-\ 'left',
-\ 'center',
-\ 'right',
-\ 'justify',
-\ 'char'
-\ ],
-\ 'valign' : [
-\ 'top',
-\ 'middle',
-\ 'bottom',
-\ 'baseline'
-\ ],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'char' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'legend' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'accesskey' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'dd' : [
-\ [
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'form',
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'hr' : [[],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'li' : [
-\ [
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'form',
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'td' : [
-\ [
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'form',
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'headers' : [],
-\ 'ondblclick' : [],
-\ 'axis' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'abbr' : [],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'label' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'for' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'dl' : [
-\ [
-\ 'dt',
-\ 'dd'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'kbd' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'div' : [
-\ [
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'form',
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'object' : [
-\ [
-\ 'param',
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'form',
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'width' : [],
-\ 'usemap' : [],
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'tabindex' : [],
-\ 'standby' : [],
-\ 'archive' : [],
-\ 'lang' : [],
-\ 'classid' : [],
-\ 'name' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'data' : [],
-\ 'height' : [],
-\ 'xml:lang' : [],
-\ 'codetype' : [],
-\ 'declare' : [
-\  'BOOL'
-\ ],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'type' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : [],
-\ 'codebase' : []
-\ }
-\ ],
-\ 'dt' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'pre' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button'
-\ ],
-\ {
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'xml:space' : [
-\ 'preserve'
-\ ],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'samp' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'col' : [[],
-\ {
-\ 'disabled' : [
-\ 'disabled'
-\ ],
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'value' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'label' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : [],
-\ 'selected' : [
-\ 'BOOL'
-\ ]
-\ }
-\ ],
-\ 'cite' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'i' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'select' : [
-\ [
-\ 'optgroup',
-\ 'option'
-\ ],
-\ {
-\ 'disabled' : [
-\ 'BOOL'
-\ ],
-\ 'ondblclick' : [],
-\ 'onblur' : [],
-\ 'size' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onchange' : [],
-\ 'onfocus' : [],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'tabindex' : [],
-\ 'lang' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'name' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'multiple' : [
-\ 'multiple'
-\ ],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'link' : [[],
-\ {
-\ 'rel' : [],
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'media' : [
-\ 'screen',
-\ 'tty',
-\ 'tv',
-\ 'projection',
-\ 'handheld',
-\ 'print',
-\ 'braille',
-\ 'aural',
-\ 'all'
-\ ],
-\ 'href' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'charset' : [],
-\ 'hreflang' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'rev' : [],
-\ 'type' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'script' : [[],
-\ {
-\ 'defer' : [
-\ 'BOOL'
-\ ],
-\ 'src' : [],
-\ 'type' : [
-\ 'text/javascript'
-\ ],
-\ 'charset' : [],
-\ 'xml:space' : [
-\  'preserve'
-\  ]
-\ }
-\ ],
-\ 'bdo' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'colgroup' : [
-\ [
-\ 'col'
-\ ],
-\ {
-\ 'width' : [],
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'charoff' : [],
-\ 'onmouseover' : [],
-\ 'align' : [
-\  'left',
-\  'center',
-\  'right',
-\  'justify',
-\  'char'
-\ ],
-\ 'lang' : [],
-\ 'valign' : [
-\ 'top',
-\ 'middle',
-\ 'bottom',
-\ 'baseline'
-\ ],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'char' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : [],
-\ 'span' : [
-\ '',
-\ '1',
-\ ]
-\ }
-\ ],
-\ 'h2' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'ins' : [
-\ [
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'form',
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'ondblclick' : [],
-\ 'datetime' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'cite' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'p' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'sub' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'big' : [
-\ [
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'fieldset' : [
-\ [
-\ 'legend',
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'form',
-\ 'a',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'input',
-\ 'select',
-\ 'textarea',
-\ 'label',
-\ 'button',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'noscript' : [
-\ [
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'fieldset',
-\ 'table',
-\ 'form',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'onmouseout' : [],
-\ 'onmousemove' : [],
-\ 'style' : [],
-\ 'ondblclick' : [],
-\ 'xml:lang' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onkeypress' : [],
-\ 'onmousedown' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'class' : [],
-\ 'title' : [],
-\ 'onclick' : []
-\ }
-\ ],
-\ 'button' : [
-\ [
-\ 'p',
-\ 'h1',
-\ 'h2',
-\ 'h3',
-\ 'h4',
-\ 'h5',
-\ 'h6',
-\ 'div',
-\ 'ul',
-\ 'ol',
-\ 'dl',
-\ 'pre',
-\ 'hr',
-\ 'blockquote',
-\ 'address',
-\ 'table',
-\ 'br',
-\ 'span',
-\ 'bdo',
-\ 'object',
-\ 'img',
-\ 'map',
-\ 'tt',
-\ 'i',
-\ 'b',
-\ 'big',
-\ 'small',
-\ 'em',
-\ 'strong',
-\ 'dfn',
-\ 'code',
-\ 'q',
-\ 'sub',
-\ 'sup',
-\ 'samp',
-\ 'kbd',
-\ 'var',
-\ 'cite',
-\ 'abbr',
-\ 'acronym',
-\ 'ins',
-\ 'del',
-\ 'script',
-\ 'noscript'
-\ ],
-\ {
-\ 'accesskey' : [],
-\ 'disabled' : [
-\ 'disabled'
-\ ],
-\ 'ondblclick' : [],
-\ 'onblur' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onfocus' : [],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'tabindex' : [],
-\ 'lang' : [],
-\ 'value' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'name' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'type' : [
-\ 'button',
-\ 'submit',
-\ 'reset'
-\ ],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ],
-\ 'optgroup' : [
-\ [
-\ 'option'
-\ ],
-\ {
-\ 'disabled' : [
-\ 'disabled'
-\ ],
-\ 'ondblclick' : [],
-\ 'dir' : [
-\ 'ltr',
-\ 'rtl'
-\ ],
-\ 'onkeydown' : [],
-\ 'onkeyup' : [],
-\ 'onmouseup' : [],
-\ 'id' : [],
-\ 'onmouseover' : [],
-\ 'lang' : [],
-\ 'style' : [],
-\ 'onmousemove' : [],
-\ 'onmouseout' : [],
-\ 'xml:lang' : [],
-\ 'onmousedown' : [],
-\ 'onkeypress' : [],
-\ 'label' : [],
-\ 'onclick' : [],
-\ 'title' : [],
-\ 'class' : []
-\ }
-\ ]
-\ }
-"endfunction
-" }}}
-" vim:set foldmethod=marker:
+" vim:ft=vim:ff=unix
new file mode 100644
--- /dev/null
+++ b/runtime/autoload/xml/xhtml10t.vim
@@ -0,0 +1,461 @@
+let g:xmldata_xhtml10t = {
+\ 'vimxmlentities' : ["AElig", "Aacute", "Acirc", "Agrave", "Alpha", "Aring", "Atilde", "Auml", "Beta", "Ccedil", "Chi", "Dagger", "Delta", "ETH", "Eacute", "Ecirc", "Egrave", "Epsilon", "Eta", "Euml", "Gamma", "Iacute", "Icirc", "Igrave", "Iota", "Iuml", "Kappa", "Lambda", "Mu", "Ntilde", "Nu", "OElig", "Oacute", "Ocirc", "Ograve", "Omega", "Omicron", "Oslash", "Otilde", "Ouml", "Phi", "Pi", "Prime", "Psi", "Rho", "Scaron", "Sigma", "THORN", "TITY", "Tau", "Theta", "Uacute", "Ucirc", "Ugrave", "Upsilon", "Uuml", "Xi", "Yacute", "Yuml", "Zeta", "amp", "aacute", "acirc", "acute", "aelig", "agrave", "alefsym", "alpha", "and", "ang", "apos", "aring", "asymp", "atilde", "auml", "bdquo", "beta", "brvbar", "bull", "cap", "ccedil", "cedil", "cent", "chi", "circ", "clubs", "copy", "cong", "crarr", "cup", "curren", "dArr", "dagger", "darr", "deg", "delta", "diams", "divide", "eacute", "ecirc", "egrave", "empty", "ensp", "emsp", "epsilon", "equiv", "eta", "eth", "euro", "euml", "exist", "fnof", "forall", "frac12", "frac14", "frac34", "frasl", "gt", "gamma", "ge", "hArr", "harr", "hearts", "hellip", "iacute", "icirc", "iexcl", "igrave", "image", "infin", "int", "iota", "iquest", "isin", "iuml", "kappa", "lt", "laquo", "lArr", "lambda", "lang", "larr", "lceil", "ldquo", "le", "lfloor", "lowast", "loz", "lrm", "lsaquo", "lsquo", "macr", "mdash", "micro", "middot", "minus", "mu", "nbsp", "nabla", "ndash", "ne", "ni", "not", "notin", "nsub", "ntilde", "nu", "oacute", "ocirc", "oelig", "ograve", "oline", "omega", "omicron", "oplus", "or", "ordf", "ordm", "oslash", "otilde", "otimes", "ouml", "para", "part", "permil", "perp", "phi", "pi", "piv", "plusmn", "pound", "prime", "prod", "prop", "psi", "quot", "rArr", "raquo", "radic", "rang", "rarr", "rceil", "rdquo", "real", "reg", "rfloor", "rho", "rlm", "rsaquo", "rsquo", "sbquo", "scaron", "sdot", "sect", "shy", "sigma", "sigmaf", "sim", "spades", "sub", "sube", "sum", "sup", "sup1", "sup2", "sup3", "supe", "szlig", "tau", "there4", "theta", "thetasym", "thinsp", "thorn", "tilde", "times", "trade", "uArr", "uacute", "uarr", "ucirc", "ugrave", "uml", "upsih", "upsilon", "uuml", "weierp", "xi", "yacute", "yen", "yuml", "zeta", "zwj", "zwnj"],
+\ 'vimxmlroot': ['html'],
+\ 'a': [
+\ ['br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'accesskey': [], 'rel': [], 'coords': [], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onblur': [], 'onkeydown': [], 'target': [], 'onfocus': [], 'onkeyup': [], 'href': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'tabindex': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'name': [], 'charset': [], 'xml:lang': [], 'hreflang': [], 'onkeypress': [], 'onmousedown': [], 'rev': [], 'class': [], 'title': [], 'onclick': [], 'type': [], 'shape': ['rect', 'rect', 'circle', 'poly', 'default']}
+\ ],
+\ 'abbr': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'acronym': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'address': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script', 'p'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'applet': [
+\ ['param', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'width': [], 'object': [], 'id': [], 'code': [], 'vspace': [], 'archive': [], 'alt': [], 'align': ['top', 'middle', 'bottom', 'left', 'right'], 'style': [], 'name': [], 'height': [], 'hspace': [], 'title': [], 'class': [], 'codebase': []}
+\ ],
+\ 'area': [
+\ [],
+\ { 'accesskey': [], 'coords': [], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onblur': [], 'onkeydown': [], 'onfocus': [], 'nohref': ['BOOL'], 'target': [], 'onkeyup': [], 'href': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'tabindex': [], 'lang': [], 'alt': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'shape': ['rect', 'rect', 'circle', 'poly', 'default']}
+\ ],
+\ 'b': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'base': [
+\ [],
+\ { 'target': [], 'href': [], 'id': []}
+\ ],
+\ 'basefont': [
+\ [],
+\ { 'size': [], 'face': [], 'color': [], 'id': []}
+\ ],
+\ 'bdo': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'big': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'blockquote': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'cite': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'body': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'vlink': [], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'alink': [], 'onkeyup': [], 'bgcolor': [], 'text': [], 'onmouseup': [], 'id': [], 'link': [], 'onmouseover': [], 'lang': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'background': [], 'xml:lang': [], 'onunload': [], 'onkeypress': [], 'onmousedown': [], 'onload': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'br': [
+\ [],
+\ { 'clear': ['none', 'left', 'all', 'right', 'none'], 'id': [], 'style': [], 'class': [], 'title': []}
+\ ],
+\ 'button': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'table', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'noscript', 'ins', 'del', 'script'],
+\ { 'accesskey': [], 'disabled': ['BOOL'], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onblur': [], 'onkeydown': [], 'onfocus': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'tabindex': [], 'lang': [], 'value': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'name': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'type': ['submit', 'button', 'submit', 'reset']}
+\ ],
+\ 'caption': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['top', 'bottom', 'left', 'right'], 'lang': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'center': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'cite': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'code': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'col': [
+\ [],
+\ { 'width': [], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'charoff': [], 'onmouseover': [], 'lang': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'char': [], 'span': ['1'], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'colgroup': [
+\ ['col'],
+\ { 'width': [], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'charoff': [], 'onmouseover': [], 'lang': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'char': [], 'span': ['1'], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'dd': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'del': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'datetime': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'cite': [], 'onmouseover': [], 'lang': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'dfn': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'dir': [
+\ ['li'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'compact': ['BOOL'], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'div': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify'], 'lang': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'dl': [
+\ ['dt', 'dd'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'compact': ['BOOL'], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'dt': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'em': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'fieldset': [
+\ ['legend', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'font': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'dir': ['ltr', 'rtl'], 'size': [], 'face': [], 'color': [], 'id': [], 'lang': [], 'style': [], 'xml:lang': [], 'title': [], 'class': []}
+\ ],
+\ 'form': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'enctype': ['application/x-www-form-urlencoded'], 'onsubmit': [], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'target': [], 'onkeyup': [], 'onmouseup': [], 'onreset': [], 'id': [], 'method': ['get', 'get', 'post'], 'onmouseover': [], 'lang': [], 'accept': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'name': [], 'xml:lang': [], 'accept-charset': [], 'onkeypress': [], 'onmousedown': [], 'action': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'h1': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify'], 'lang': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'h2': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify'], 'lang': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'h3': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify'], 'lang': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'h4': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify'], 'lang': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'h5': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify'], 'lang': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'h6': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify'], 'lang': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'head': [
+\ ['script', 'style', 'meta', 'link', 'object', 'isindex', 'title', 'script', 'style', 'meta', 'link', 'object', 'isindex', 'base', 'script', 'style', 'meta', 'link', 'object', 'isindex', 'base', 'script', 'style', 'meta', 'link', 'object', 'isindex', 'title', 'script', 'style', 'meta', 'link', 'object', 'isindex'],
+\ { 'profile': [], 'dir': ['ltr', 'rtl'], 'id': [], 'lang': [], 'xml:lang': []}
+\ ],
+\ 'hr': [
+\ [],
+\ { 'width': [], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'size': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right'], 'lang': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'noshade': ['BOOL'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'html': [
+\ ['head', 'body'],
+\ { 'xmlns': ['http://www.w3.org/1999/xhtml'], 'dir': ['ltr', 'rtl'], 'id': [], 'lang': [], 'xml:lang': []}
+\ ],
+\ 'i': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': []}
+\ ],
+\ 'iframe': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'width': [], 'scrolling': ['auto', 'yes', 'no', 'auto'], 'marginwidth': [], 'id': [], 'marginheight': [], 'align': ['top', 'middle', 'bottom', 'left', 'right'], 'longdesc': [], 'src': [], 'style': [], 'name': [], 'height': [], 'frameborder': ['1', '1', '0'], 'title': [], 'class': []}
+\ ],
+\ 'img': [
+\ [],
+\ { 'width': [], 'usemap': [], 'ismap': ['BOOL'], 'ondblclick': [], 'dir': ['ltr', 'rtl'], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'vspace': [], 'onmouseover': [], 'alt': [], 'lang': [], 'align': ['top', 'middle', 'bottom', 'left', 'right'], 'src': [], 'longdesc': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'name': [], 'xml:lang': [], 'height': [], 'border': [], 'hspace': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': []}
+\ ],
+\ 'input': [
+\ [],
+\ { 'ondblclick': [], 'onkeydown': [], 'readonly': ['BOOL'], 'onchange': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'align': ['top', 'middle', 'bottom', 'left', 'right'], 'value': [], 'src': [], 'name': [], 'checked': ['BOOL'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'type': ['text', 'text', 'password', 'checkbox', 'radio', 'submit', 'reset', 'file', 'hidden', 'image', 'button'], 'accesskey': [], 'disabled': ['BOOL'], 'usemap': [], 'dir': ['ltr', 'rtl'], 'onblur': [], 'size': [], 'onfocus': [], 'maxlength': [], 'onselect': [], 'accept': [], 'tabindex': [], 'alt': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'ins': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'datetime': [], 'cite': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'isindex': [
+\ [],
+\ { 'id': [], 'lang': [], 'prompt': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'xml:lang': []}
+\ ],
+\ 'kbd': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'label': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'for': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'accesskey': [], 'dir': ['ltr', 'rtl'], 'onblur': [], 'onfocus': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'legend': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['top', 'bottom', 'left', 'right'], 'lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'accesskey': [], 'dir': ['ltr', 'rtl'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'li': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'value': [], 'onkeypress': [], 'onmousedown': [], 'type': [], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'link': [
+\ [],
+\ { 'rel': [], 'ondblclick': [], 'onkeydown': [], 'target': [], 'onkeyup': [], 'href': [], 'media': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'charset': [], 'hreflang': [], 'onkeypress': [], 'onmousedown': [], 'rev': [], 'class': [], 'title': [], 'onclick': [], 'type': [], 'dir': ['ltr', 'rtl'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'map': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'noscript', 'ins', 'del', 'script', 'area'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'name': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'onclick': [], 'title': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmouseout': [], 'onmousemove': [], 'xml:lang': []}
+\ ],
+\ 'menu': [
+\ ['li'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'compact': ['BOOL'], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'meta': [
+\ [],
+\ { 'http-equiv': [], 'content': [], 'id': [], 'lang': [], 'name': [], 'scheme': [], 'dir': ['ltr', 'rtl'], 'xml:lang': []}
+\ ],
+\ 'noframes': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'noscript': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'object': [
+\ ['param', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'align': ['top', 'middle', 'bottom', 'left', 'right'], 'name': [], 'data': [], 'declare': ['BOOL'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'type': [], 'width': [], 'usemap': [], 'dir': ['ltr', 'rtl'], 'vspace': [], 'tabindex': [], 'standby': [], 'archive': [], 'classid': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'height': [], 'xml:lang': [], 'border': [], 'codetype': [], 'hspace': [], 'codebase': []}
+\ ],
+\ 'ol': [
+\ ['li'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'compact': ['BOOL'], 'onmouseover': [], 'lang': [], 'onkeypress': [], 'onmousedown': [], 'type': [], 'class': [], 'title': [], 'onclick': [], 'start': [], 'dir': ['ltr', 'rtl'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'optgroup': [
+\ ['option'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'label': [], 'disabled': ['BOOL'], 'dir': ['ltr', 'rtl'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'option': [
+\ [''],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'value': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'label': [], 'disabled': ['BOOL'], 'dir': ['ltr', 'rtl'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'selected': ['BOOL']}
+\ ],
+\ 'p': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify'], 'lang': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'param': [
+\ [],
+\ { 'id': [], 'value': [], 'name': [], 'type': [], 'valuetype': ['data', 'data', 'ref', 'object']}
+\ ],
+\ 'pre': [
+\ ['a', 'br', 'span', 'bdo', 'tt', 'i', 'b', 'u', 's', 'strike', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'xml:space': ['preserve', 'preserve'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'width': [], 'dir': ['ltr', 'rtl'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'q': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'cite': [], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 's': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'samp': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'script': [
+\ [''],
+\ { 'id': [], 'src': [], 'charset': [], 'xml:space': ['preserve', 'preserve'], 'type': ['text/javascript'], 'defer': ['BOOL'], 'language': []}
+\ ],
+\ 'select': [
+\ ['optgroup', 'option'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onchange': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'name': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'disabled': ['BOOL'], 'dir': ['ltr', 'rtl'], 'size': [], 'onblur': [], 'onfocus': [], 'tabindex': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'multiple': ['BOOL']}
+\ ],
+\ 'small': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'span': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'strike': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'strong': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'style': [
+\ [''],
+\ { 'media': [], 'id': [], 'lang': [], 'xml:space': ['preserve', 'preserve'], 'title': [], 'type': ['text/css'], 'dir': ['ltr', 'rtl'], 'xml:lang': []}
+\ ],
+\ 'sub': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'sup': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'table': [
+\ ['caption', 'col', 'colgroup', 'thead', 'tfoot', 'tbody', 'tr'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'align': ['left', 'center', 'right'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'width': [], 'frame': ['void', 'above', 'below', 'hsides', 'lhs', 'rhs', 'vsides', 'box', 'border'], 'rules': ['none', 'groups', 'rows', 'cols', 'all'], 'dir': ['ltr', 'rtl'], 'summary': [], 'bgcolor': [], 'cellspacing': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'border': [], 'cellpadding': []}
+\ ],
+\ 'tbody': [
+\ ['tr'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'lang': [], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'charoff': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'char': []}
+\ ],
+\ 'td': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'axis': [], 'onkeydown': [], 'abbr': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'scope': ['row', 'col', 'rowgroup', 'colgroup'], 'onmouseover': [], 'lang': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'width': [], 'headers': [], 'nowrap': ['BOOL'], 'dir': ['ltr', 'rtl'], 'rowspan': ['1'], 'colspan': ['1'], 'bgcolor': [], 'charoff': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'height': [], 'char': []}
+\ ],
+\ 'textarea': [
+\ [''],
+\ { 'ondblclick': [], 'cols': [], 'onkeydown': [], 'readonly': ['BOOL'], 'onchange': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'name': [], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'accesskey': [], 'disabled': ['BOOL'], 'rows': [], 'dir': ['ltr', 'rtl'], 'onblur': [], 'onfocus': [], 'onselect': [], 'tabindex': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'tfoot': [
+\ ['tr'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'lang': [], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'charoff': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'char': []}
+\ ],
+\ 'th': [
+\ ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'ul', 'ol', 'dl', 'menu', 'dir', 'pre', 'hr', 'blockquote', 'address', 'center', 'noframes', 'isindex', 'fieldset', 'table', 'form', 'a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'noscript', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'axis': [], 'onkeydown': [], 'abbr': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'scope': ['row', 'col', 'rowgroup', 'colgroup'], 'onmouseover': [], 'lang': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'width': [], 'headers': [], 'nowrap': ['BOOL'], 'dir': ['ltr', 'rtl'], 'rowspan': ['1'], 'colspan': ['1'], 'bgcolor': [], 'charoff': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'height': [], 'char': []}
+\ ],
+\ 'thead': [
+\ ['tr'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'lang': [], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'charoff': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'char': []}
+\ ],
+\ 'title': [
+\ [''],
+\ { 'id': [], 'lang': [], 'dir': ['ltr', 'rtl'], 'xml:lang': []}
+\ ],
+\ 'tr': [
+\ ['th', 'td'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'align': ['left', 'center', 'right', 'justify', 'char'], 'lang': [], 'valign': ['top', 'middle', 'bottom', 'baseline'], 'onkeypress': [], 'onmousedown': [], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'bgcolor': [], 'charoff': [], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': [], 'char': []}
+\ ],
+\ 'tt': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'u': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'ul': [
+\ ['li'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'compact': ['BOOL'], 'onmouseover': [], 'lang': [], 'onkeypress': [], 'onmousedown': [], 'type': ['disc', 'square', 'circle'], 'class': [], 'title': [], 'onclick': [], 'dir': ['ltr', 'rtl'], 'onmouseout': [], 'onmousemove': [], 'style': [], 'xml:lang': []}
+\ ],
+\ 'var': [
+\ ['a', 'br', 'span', 'bdo', 'object', 'applet', 'img', 'map', 'iframe', 'tt', 'i', 'b', 'u', 's', 'strike', 'big', 'small', 'font', 'basefont', 'em', 'strong', 'dfn', 'code', 'q', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'sub', 'sup', 'input', 'select', 'textarea', 'label', 'button', 'ins', 'del', 'script'],
+\ { 'ondblclick': [], 'onkeydown': [], 'onkeyup': [], 'onmouseup': [], 'id': [], 'onmouseover': [], 'lang': [], 'onmousedown': [], 'onkeypress': [], 'onclick': [], 'title': [], 'class': [], 'dir': ['ltr', 'rtl'], 'style': [], 'onmousemove': [], 'onmouseout': [], 'xml:lang': []}
+\ ],
+\ 'vimxmlattrinfo' : {
+\ 'accept' : ['ContentType', ''],
+\ 'accesskey' : ['Character', ''],
+\ 'action' : ['*URI', ''],
+\ 'align' : ['String', ''],
+\ 'alt' : ['*Text', ''],
+\ 'archive' : ['UriList', ''],
+\ 'axis' : ['CDATA', ''],
+\ 'border' : ['Pixels', ''],
+\ 'cellpadding' : ['Length', ''],
+\ 'cellspacing' : ['Length', ''],
+\ 'char' : ['Character', ''],
+\ 'charoff' : ['Length', ''],
+\ 'charset' : ['LangCode', ''],
+\ 'checked' : ['Bool', ''],
+\ 'class' : ['CDATA', ''],
+\ 'codetype' : ['ContentType', ''],
+\ 'cols' : ['*Number', ''],
+\ 'colspan' : ['Number', ''],
+\ 'content' : ['*CDATA', ''],
+\ 'coords' : ['Coords', ''],
+\ 'data' : ['URI', ''],
+\ 'datetime' : ['DateTime', ''],
+\ 'declare' : ['Bool', ''],
+\ 'defer' : ['Bool', ''],
+\ 'dir' : ['String', ''],
+\ 'disabled' : ['Bool', ''],
+\ 'enctype' : ['ContentType', ''],
+\ 'for' : ['ID', ''],
+\ 'headers' : ['IDREFS', ''],
+\ 'height' : ['Number', ''],
+\ 'href' : ['*URI', ''],
+\ 'hreflang' : ['LangCode', ''],
+\ 'id' : ['ID', 'Unique string'],
+\ 'ismap' : ['Bool', ''],
+\ 'label' : ['*Text', ''],
+\ 'lang' : ['LangCode', ''],
+\ 'longdesc' : ['URI', ''],
+\ 'maxlength' : ['Number', ''],
+\ 'media' : ['MediaDesc', ''],
+\ 'method' : ['String', ''],
+\ 'multiple' : ['Bool', ''],
+\ 'name' : ['CDATA', ''],
+\ 'nohref' : ['Bool', ''],
+\ 'onblur' : ['Script', ''],
+\ 'onchange' : ['Script', ''],
+\ 'onclick' : ['Script', ''],
+\ 'ondblclick' : ['Script', ''],
+\ 'onfocus' : ['Script', ''],
+\ 'onkeydown' : ['Script', ''],
+\ 'onkeypress' : ['Script', ''],
+\ 'onkeyup' : ['Script', ''],
+\ 'onload' : ['Script', ''],
+\ 'onmousedown' : ['Script', ''],
+\ 'onmousemove' : ['Script', ''],
+\ 'onmouseout' : ['Script', ''],
+\ 'onmouseover' : ['Script', ''],
+\ 'onmouseup' : ['Script', ''],
+\ 'onreset' : ['Script', ''],
+\ 'onselect' : ['Script', ''],
+\ 'onsubmit' : ['Script', ''],
+\ 'onunload' : ['Script', ''],
+\ 'profile' : ['URI', ''],
+\ 'readonly' : ['Bool', ''],
+\ 'rel' : ['LinkTypes', ''],
+\ 'rev' : ['LinkTypes', ''],
+\ 'rows' : ['*Number', ''],
+\ 'rules' : ['String', ''],
+\ 'scheme' : ['CDATA', ''],
+\ 'selected' : ['Bool', ''],
+\ 'shape' : ['Shape', ''],
+\ 'size' : ['CDATA', ''],
+\ 'span' : ['Number', ''],
+\ 'src' : ['*URI', ''],
+\ 'standby' : ['Text', ''],
+\ 'style' : ['StyleSheet', ''],
+\ 'summary' : ['*Text', ''],
+\ 'tabindex' : ['Number', ''],
+\ 'title' : ['Text', ''],
+\ 'type' : ['*ContentType', ''],
+\ 'usemap' : ['URI', ''],
+\ 'valign' : ['String', ''],
+\ 'valuetype' : ['String', ''],
+\ 'width' : ['Number', ''],
+\ 'xmlns' : ['URI', '']
+\ },
+\ 'vimxmltaginfo': {
+\ 'area': ['/>', ''],
+\ 'base': ['/>', ''],
+\ 'basefont': ['/>', ''],
+\ 'br': ['/>', ''],
+\ 'col': ['/>', ''],
+\ 'hr': ['/>', ''],
+\ 'img': ['/>', ''],
+\ 'input': ['/>', ''],
+\ 'isindex': ['/>', ''],
+\ 'link': ['/>', ''],
+\ 'meta': ['/>', ''],
+\ 'param': ['/>', ''],
+\ }
+\ }
+" vim:ft=vim:ff=unix
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 7.0e.  Last change: 2006 Apr 18
+*insert.txt*    For Vim version 7.0e.  Last change: 2006 Apr 20
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1026,7 +1026,8 @@ The "menu" item is used in the popup men
 be relatively short.  The "info" item can be longer, it will  be displayed in
 the preview window when "preview" appears in 'completeopt'.  The "info" item
 will also remain displayed after the popup menu has been removed.  This is
-useful for function arguments.
+useful for function arguments.  Use a single space for "info" to remove
+existing text in the preview window.
 
 The "kind" item uses a single letter to indicate the kind of completion.  This
 may be used to show the completion differently (different color or icon).
@@ -1266,22 +1267,32 @@ run |:make| command to detect formatting
 
 HTML flavor						*html-flavor*
 
-By default HTML completion provides completion for XHTML 1.0 Strict. This is
-not the only HTML version. To use another data file and still have benefits of
-custom completion for class, style, etc. attributes set g:html_omni_flavor
-variable. Example (in .vimrc or filetype plugin file): >
+Default HTML completion depends on filetype. For HTML files it is HTML
+4.01 Transitional (&ft=='html'), for XHTML it is XHTML 1.0 Strict
+(&ft=='xhtml').
 
-	let g:html_omni_flavor = 'xhtml10t'
+These are not the only HTML versions. To use another data file and still
+have benefits of custom completion for class, style, etc. attributes set
+b:html_omni_flavor variable. Example (in .vimrc or filetype plugin
+file): >
+
+	let g:html_omni_flavor = 'xhtml10s'
 
-Data for HTML completion will be read from 'autoload/xml/xhtml10t.vim' file
-located somewhere in 'runtimepath' (not in default distribution).
+(Completion data file for HTML 4.01 Strict is also provided by Vim
+distribution.)
+
+Data for HTML completion will be read from 'autoload/xml/html10s.vim' file
+located somewhere in 'runtimepath'.
 
-More about format of data file in |xml-omni-datafile|. Some of data files may
-in future be found on vim-online site (|www|).
+Note: HTML completion files are also located in 'autoload/xml'
+directory.
 
-Note that g:html_omni_flavor may point to file with any XML data.  This makes
-possible to mix PHP (|ft-php-omni|) completion with whatever XML dialect
-(assuming you have data file for it).
+More about format of data file in |xml-omni-datafile|. Some of data
+files may in future be found on vim-online site (|www|).
+
+Note that b:html_omni_flavor may point to file with any XML data.  This
+makes possible to mix PHP (|ft-php-omni|) completion with whatever XML
+dialect (assuming you have data file for it).
 
 
 JAVASCRIPT					       *ft-javascript-omni*
@@ -1359,6 +1370,39 @@ automatically switch to HTML/CSS/JavaScr
 original HTML files completion of tags (and only tags) isn't context aware.
 
 
+RUBY                                                    *ft-ruby-omni*
+
+Completion of Ruby code requires that vim be built with |+ruby|.
+
+Ruby completion will parse your buffer on demand in order to provide a list of
+completions.  These completions will be drawn from modules loaded by 'require'
+and modules defined in the current buffer.
+
+The completions provided by CTRL-X CTRL-O are sensitive to the context:
+
+          CONTEXT                          COMPLETIONS PROVIDED ~
+
+ 1. Not inside a class definition    Classes, constants and globals
+
+ 2. Inside a class definition        Methods or constants defined in the class
+
+ 3. After '.', '::' or ':'           Methods applicable to the object being
+                                       dereferenced
+
+ 4. After ':' or ':foo'              Symbol name (beginning with 'foo')
+
+Notes:
+ - Vim will load/evaluate code in order to provide completions.  This may
+   cause some code execution, which may be a concern.
+ - In context 2 above, anonymous classes are not supported.
+ - In context 3 above, Vim will attempt to determine the methods supported by
+   the object.
+ - Vim can detect and load the Rails environment for files within a rails
+   project. The feature is disabled by default, to enable it add >
+	   let g:rubycomplete_rails = 1
+<  to your vimrc.
+
+
 SYNTAX							*ft-syntax-omni*
 
 This uses the current syntax highlighting for completion.  It can be used for
--- a/runtime/doc/intro.txt
+++ b/runtime/doc/intro.txt
@@ -1,4 +1,4 @@
-*intro.txt*     For Vim version 7.0e.  Last change: 2006 Apr 09
+*intro.txt*     For Vim version 7.0e.  Last change: 2006 Apr 20
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -75,7 +75,7 @@ Published by O'Reilly.  ISBN: 1-56592-42
 ==============================================================================
 2. Vim on the internet					*internet*
 
-			*www* *faq* *FAQ* *distribution* *download*
+			*www* *WWW*  *faq* *FAQ* *distribution* *download*
 The Vim pages contain the most recent information about Vim.  They also
 contain links to the most recent version of Vim.  The FAQ is a list of
 Frequently Asked Questions.  Read this if you have problems.
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 7.0e.  Last change: 2006 Apr 19
+*map.txt*       For Vim version 7.0e.  Last change: 2006 Apr 20
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -882,10 +882,11 @@ See |:verbose-cmd| for more information.
 			avoid that a typed {lhs} is expanded, since
 			command-line abbreviations apply here.
 
-:ab[breviate] {lhs} {rhs}
+:ab[breviate] [<expr>] {lhs} {rhs}
 			add abbreviation for {lhs} to {rhs}.  If {lhs} already
 			existed it is replaced with the new {rhs}.  {rhs} may
 			contain spaces.
+			See |:map-<expr>| for the optional <expr> argument.
 
 						*:una* *:unabbreviate*
 :una[bbreviate] {lhs}	Remove abbreviation for {lhs} from the list.  If none
@@ -895,12 +896,13 @@ See |:verbose-cmd| for more information.
 			expansion insert a CTRL-V (type it twice).
 
 						*:norea* *:noreabbrev*
-:norea[bbrev] [lhs] [rhs]
+:norea[bbrev] [<expr>] [lhs] [rhs]
 			same as ":ab", but no remapping for this {rhs} {not
 			in Vi}
 
 						*:ca* *:cabbrev*
-:ca[bbrev] [lhs] [rhs]	same as ":ab", but for Command-line mode only.  {not
+:ca[bbrev] [<expr>] [lhs] [rhs]
+			same as ":ab", but for Command-line mode only.  {not
 			in Vi}
 
 						*:cuna* *:cunabbrev*
@@ -908,19 +910,20 @@ See |:verbose-cmd| for more information.
 			in Vi}
 
 						*:cnorea* *:cnoreabbrev*
-:cnorea[bbrev] [lhs] [rhs]
+:cnorea[bbrev] [<expr>] [lhs] [rhs]
 			same as ":ab", but for Command-line mode only and no
 			remapping for this {rhs} {not in Vi}
 
 						*:ia* *:iabbrev*
-:ia[bbrev] [lhs] [rhs]	same as ":ab", but for Insert mode only.  {not in Vi}
+:ia[bbrev] [<expr>] [lhs] [rhs]
+			same as ":ab", but for Insert mode only.  {not in Vi}
 
 						*:iuna* *:iunabbrev*
 :iuna[bbrev] {lhs}	same as ":una", but for insert mode only.  {not in
 			Vi}
 
 						*:inorea* *:inoreabbrev*
-:inorea[bbrev] [lhs] [rhs]
+:inorea[bbrev] [<expr>] [lhs] [rhs]
 			same as ":ab", but for Insert mode only and no
 			remapping for this {rhs} {not in Vi}
 
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.0e.  Last change: 2006 Apr 18
+*options.txt*	For Vim version 7.0e.  Last change: 2006 Apr 20
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -6684,6 +6684,7 @@ A jump table for the options with a shor
 	this.  'textwidth' is set to 0 when the 'paste' option is set.  When
 	'textwidth' is zero, 'wrapmargin' may be used.  See also
 	'formatoptions' and |ins-textwidth|.
+	When 'formatexpr' is set it will be used to break the line.
 	NOTE: This option is set to 0 when 'compatible' is set.
 
 						*'thesaurus'* *'tsr'*
--- a/runtime/doc/spell.txt
+++ b/runtime/doc/spell.txt
@@ -1,4 +1,4 @@
-*spell.txt*	For Vim version 7.0e.  Last change: 2006 Apr 12
+*spell.txt*	For Vim version 7.0e.  Last change: 2006 Apr 20
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -161,6 +161,10 @@ z=			For the word under/after the cursor
 			mode and when there are no line wraps).  Click on the
 			first line (the header) to cancel.
 
+			The suggestions listed normally replace a highlighted
+			bad word.  Sometimes they include other text, in that
+			case the replaced text is also listed after a "<".
+
 			If a count is used that suggestion is used, without
 			prompting.  For example, "1z=" always takes the first
 			suggestion.
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*	For Vim version 7.0e.  Last change: 2006 Apr 15
+*syntax.txt*	For Vim version 7.0e.  Last change: 2006 Apr 20
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -1606,12 +1606,22 @@ instead, and the name of your source fil
 
 LUA						*lua.vim* *ft-lua-syntax*
 
-This syntax file may be used for Lua 4.0 and Lua 5.0 (default).  If you are
-programming in Lua 4.0, use this: >
+This syntax file may be used for Lua 4.0, Lua 5.0 or Lua 5.1 (the latter is
+the default). You can select one of these versions using the global variables
+lua_version and lua_subversion. For example, to activate Lua
+4.0 syntax highlighting, use this command: >
 
 	:let lua_version = 4
 
-If lua_version variable doesn't exist, it is set to 5.
+If you are using Lua 5.0, use these commands: >
+
+	:let lua_version = 5
+	:let lua_subversion = 0
+
+To restore highlighting for Lua 5.1: >
+
+	:let lua_version = 5
+	:let lua_subversion = 1
 
 
 MAIL						*mail.vim* *ft-mail.vim*
@@ -2765,7 +2775,7 @@ DEFINING KEYWORDS					*:syn-keyword*
   :syntax keyword   Type   contained int long char
   :syntax keyword   Type   int long contained char
   :syntax keyword   Type   int long char contained
-<								*E747*
+<								*E789*
 	When you have a keyword with an optional tail, like Ex commands in
 	Vim, you can put the optional characters inside [], to define all the
 	variations at once: >
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -3959,7 +3959,6 @@ E744	netbeans.txt	/*E744*
 E745	eval.txt	/*E745*
 E746	eval.txt	/*E746*
 E747	editing.txt	/*E747*
-E747	syntax.txt	/*E747*
 E748	repeat.txt	/*E748*
 E749	eval.txt	/*E749*
 E75	vi_diff.txt	/*E75*
@@ -4005,6 +4004,7 @@ E785	eval.txt	/*E785*
 E786	eval.txt	/*E786*
 E787	diff.txt	/*E787*
 E788	autocmd.txt	/*E788*
+E789	syntax.txt	/*E789*
 E79	message.txt	/*E79*
 E80	message.txt	/*E80*
 E800	arabic.txt	/*E800*
@@ -4264,6 +4264,7 @@ W16	message.txt	/*W16*
 W17	arabic.txt	/*W17*
 W18	syntax.txt	/*W18*
 WORD	motion.txt	/*WORD*
+WWW	intro.txt	/*WWW*
 Win32	os_win32.txt	/*Win32*
 WinEnter	autocmd.txt	/*WinEnter*
 WinLeave	autocmd.txt	/*WinLeave*
@@ -5314,6 +5315,7 @@ ft-python-syntax	syntax.txt	/*ft-python-
 ft-quake-syntax	syntax.txt	/*ft-quake-syntax*
 ft-readline-syntax	syntax.txt	/*ft-readline-syntax*
 ft-rexx-syntax	syntax.txt	/*ft-rexx-syntax*
+ft-ruby-omni	insert.txt	/*ft-ruby-omni*
 ft-ruby-syntax	syntax.txt	/*ft-ruby-syntax*
 ft-scheme-syntax	syntax.txt	/*ft-scheme-syntax*
 ft-sdl-syntax	syntax.txt	/*ft-sdl-syntax*
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.0e.  Last change: 2006 Apr 19
+*todo.txt*      For Vim version 7.0e.  Last change: 2006 Apr 20
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -30,14 +30,13 @@ be worked on, but only if you sponsor Vi
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-Hang in omni completion when 'lines' is 6. (dtsfan)
+For a tooltip of at GUI tab label we need a new field.  Also 'guitabtip'?
 
 Crash in "z=" when the change triggers checking out the file, FileChangedRO
 event.  Problem in move_lines()?  FileChangedShell also involved? (Neil Bird)
 Added a few checks for valid buffer, did that help?
 
-Check findoption() return value.
-Other coverity false positives?
+Fix coverity false positives?
 
 Add more tests for all new functionality in Vim 7.  Especially new functions.
 
@@ -1086,6 +1085,7 @@ 8   Support saving and restoring session
 Tab pages:
 9   GUI implementation for the tab pages line for other systems.
 8   Make GUI menu in tab pages line configurable.  Like the popup menu.
+8   balloons for the tab page labels that are shortened to show the full path.
 8   :tabmove +N	 move tab page N pages forward
 8   :tabmove -N	 move tab page N pages backward
 7   :tabdup	 duplicate the tab with all its windows.
@@ -2009,7 +2009,8 @@ 8   When editing "tt.gz", which is in DO
     Error	    - When an error happens
     NormalEnter	    - Entering Normal mode
     ReplaceEnter    - Entering Replace mode
-    CmdEnter	    - Entering Cmdline mode
+    CmdEnter	    - Entering Cmdline mode (with type of cmdline to allow
+			different mapping)
     VisualEnter	    - Entering Visual mode
     *Leave	    - Leaving a mode (in pair with the above *Enter)
     VimLeaveCheck    - Before Vim decides to exit, so that it can be cancelled
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.0e.  Last change: 2006 Apr 19
+*version7.txt*  For Vim version 7.0e.  Last change: 2006 Apr 20
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -243,6 +243,7 @@ Currently supported languages:
 	(X)HTML with CSS			|ft-html-omni|
 	JavaScript				|ft-javascript-omni|
 	Python
+	Ruby					|ft-ruby-omni|
 	XML					|ft-xml-omni|
 	any language wih syntax highligting	|ft-syntax-omni|
 
@@ -2559,4 +2560,14 @@ The taglist() function could hang on a t
 Win32: When 'encoding' differs from the system encoding tab page labels with
 non-ASCII characters looked wrong. (Yegappan Lakshmanan)
 
+Motif: building failed when Xm/Notebook.h doesn't exist.  Added a configure
+check, disable GUI tabline when it's missing.
+
+Mac: When compiled without multi-byte feature the clipboard didn't work.
+
+It was possible to switch to another tab page when the cmdline window is open.
+
+Completion could hang when 'lines' is 6 and a preview window was opened.
+
+
  vim:tw=78:ts=8:ft=help:norl:
--- a/runtime/spell/ca/ca_ES.diff
+++ b/runtime/spell/ca/ca_ES.diff
@@ -31,7 +31,7 @@
 ! REP l·l l
   
 *** ca_ES.orig.dic	Sat Aug 13 18:33:44 2005
---- ca_ES.dic	Thu Jan 12 21:55:39 2006
+--- ca_ES.dic	Thu Apr 20 20:31:16 2006
 ***************
 *** 1,2 ****
 ! 149661
--- a/runtime/spell/es/es_ES.diff
+++ b/runtime/spell/es/es_ES.diff
@@ -24,7 +24,7 @@
 + 
   SFX J Y 12
 *** es_ES.orig.dic	Thu Aug 25 19:19:44 2005
---- es_ES.dic	Thu Aug 25 20:18:55 2005
+--- es_ES.dic	Thu Apr 20 20:30:24 2006
 ***************
 *** 485,487 ****
   acercóse
@@ -74,8 +74,14 @@
   inadecuación/S
 --- 25126,25127 ----
 ***************
-*** 28007,28009 ****
-  librancista/S
+*** 28008,28010 ****
+  líbranos
 - líbranos
-  líbranos
---- 27999,28000 ----
+  libranza/S
+--- 28000,28001 ----
+***************
+*** 48480,48481 ****
+--- 48471,48473 ----
+  xilotila/S
++ y
+  ya
--- a/runtime/syntax/bindzone.vim
+++ b/runtime/syntax/bindzone.vim
@@ -1,9 +1,12 @@
 " Vim syntax file
-" Language:	BIND 8.x zone files (RFC1035)
-" Maintainer:	glory hump <rnd@web-drive.ru>
-" Last change:	Thu Apr 26 02:16:18 SAMST 2001
-" Filenames:	/var/named/*
-" URL:	http://rnd.web-drive.ru/vim/syntax/bindzone.vim
+" Language:     BIND zone files (RFC1035)
+" Maintainer:   Julian Mehnle <julian@mehnle.net>
+" URL:          http://www.mehnle.net/source/odds+ends/vim/syntax/
+" Last Change:  Thu 2006-04-20 12:30:45 UTC
+" 
+" Based on an earlier version by Ð’ÑчеÑлав Горбанев (Slava Gorbanev), with
+" heavy modifications.
+" 
 " $Id$
 
 " For version 5.x: Clear all syntax items
@@ -16,54 +19,55 @@ endif
 
 syn case match
 
-if version >= 600
-  setlocal iskeyword=.,-,48-58,A-Z,a-z,_
-else
-  set iskeyword=.,-,48-58,A-Z,a-z,_
-endif
+" Directives
+syn region      zoneRRecord     start=/^/ end=/$/ contains=zoneOwnerName,zoneSpecial,zoneTTL,zoneClass,zoneRRType,zoneComment,zoneUnknown
 
+syn match       zoneDirective   /^\$ORIGIN\s\+/   nextgroup=zoneOrigin,zoneUnknown
+syn match       zoneDirective   /^\$TTL\s\+/      nextgroup=zoneNumber,zoneUnknown
+syn match       zoneDirective   /^\$INCLUDE\s\+/  nextgroup=zoneText,zoneUnknown
+syn match       zoneDirective   /^\$GENERATE\s/
 
-" Master File Format (rfc 1035)
+syn match       zoneUnknown     contained /\S\+/
 
-" directives
-syn region	zoneRRecord	start=+^+ end=+$+ contains=zoneLHSDomain,zoneLHSIP,zoneIllegalDom,zoneWhitespace,zoneComment,zoneParen,zoneSpecial
-syn match	zoneDirective	/\$ORIGIN\s\+/ nextgroup=zoneDomain,zoneIllegalDom
-syn match	zoneDirective	/\$TTL\s\+/ nextgroup=zoneTTL
-syn match	zoneDirective	/\$INCLUDE\s\+/
-syn match	zoneDirective	/\$GENERATE\s/
+syn match       zoneOwnerName   contained /^[^[:space:]!"#$%&'()*+,\/:;<=>?@[\]\^`{|}~]\+\(\s\|;\)\@=/ nextgroup=zoneTTL,zoneClass,zoneRRType skipwhite
+syn match       zoneOrigin      contained  /[^[:space:]!"#$%&'()*+,\/:;<=>?@[\]\^`{|}~]\+\(\s\|;\|$\)\@=/
+syn match       zoneDomain      contained  /[^[:space:]!"#$%&'()*+,\/:;<=>?@[\]\^`{|}~]\+\(\s\|;\|$\)\@=/
 
-syn match	zoneWhitespace	contained /^\s\+/ nextgroup=zoneTTL,zoneClass,zoneRRType
-syn match	zoneError	"\s\+$"
-syn match	zoneSpecial	contained /^[@.]\s\+/ nextgroup=zoneTTL,zoneClass,zoneRRType
-syn match	zoneSpecial	contained /@$/
+syn match       zoneSpecial     contained /^[@*.]\s/
+syn match       zoneTTL         contained /\<\d[0-9HhWwDd]*\>/  nextgroup=zoneClass,zoneRRType skipwhite
+syn keyword     zoneClass       contained IN CHAOS              nextgroup=zoneRRType,zoneTTL   skipwhite
+syn keyword     zoneRRType      contained A AAAA CNAME HINFO MX NS PTR SOA SRV TXT nextgroup=zoneRData skipwhite
+syn match       zoneRData       contained /[^;]*/ contains=zoneDomain,zoneIPAddr,zoneIP6Addr,zoneText,zoneNumber,zoneParen,zoneUnknown
+
+syn match       zoneIPAddr      contained /\<[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{,3}\>/
 
-" domains and IPs
-syn match	zoneLHSDomain	contained /^[-0-9A-Za-z.]\+\s\+/ nextgroup=zoneTTL,zoneClass,zoneRRType
-syn match	zoneLHSIP	contained /^[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{,3}\s\+/ nextgroup=zoneTTL,zoneClass,zoneRRType
-syn match	zoneIPaddr	contained /\<[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{,3}\>/
-syn match	zoneDomain	contained /\<[0-9A-Za-z][-0-9A-Za-z.]\+\>/
-
-syn match	zoneIllegalDom	contained /\S*[^-A-Za-z0-9.[:space:]]\S*\>/
-"syn match	zoneIllegalDom	contained /[0-9]\S*[-A-Za-z]\S*/
-
-" keywords
-syn keyword	zoneClass	IN CHAOS nextgroup=zoneRRType
+"   Plain IPv6 address          IPv6-embedded-IPv4 address
+"   1111:2:3:4:5:6:7:8          1111:2:3:4:5:6:127.0.0.1
+syn match       zoneIP6Addr     contained /\<\(\x\{1,4}:\)\{6}\(\x\{1,4}:\x\{1,4}\|\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/
+"   ::[...:]8                   ::[...:]127.0.0.1
+syn match       zoneIP6Addr     contained /\s\@<=::\(\(\x\{1,4}:\)\{,6}\x\{1,4}\|\(\x\{1,4}:\)\{,5}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/
+"   1111::[...:]8               1111::[...:]127.0.0.1
+syn match       zoneIP6Addr     contained /\<\(\x\{1,4}:\)\{1}:\(\(\x\{1,4}:\)\{,5}\x\{1,4}\|\(\x\{1,4}:\)\{,4}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/
+"   1111:2::[...:]8             1111:2::[...:]127.0.0.1
+syn match       zoneIP6Addr     contained /\<\(\x\{1,4}:\)\{2}:\(\(\x\{1,4}:\)\{,4}\x\{1,4}\|\(\x\{1,4}:\)\{,3}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/
+"   1111:2:3::[...:]8           1111:2:3::[...:]127.0.0.1
+syn match       zoneIP6Addr     contained /\<\(\x\{1,4}:\)\{3}:\(\(\x\{1,4}:\)\{,3}\x\{1,4}\|\(\x\{1,4}:\)\{,2}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/
+"   1111:2:3:4::[...:]8         1111:2:3:4::[...:]127.0.0.1
+syn match       zoneIP6Addr     contained /\<\(\x\{1,4}:\)\{4}:\(\(\x\{1,4}:\)\{,2}\x\{1,4}\|\(\x\{1,4}:\)\{,1}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/
+"   1111:2:3:4:5::[...:]8       1111:2:3:4:5::127.0.0.1
+syn match       zoneIP6Addr     contained /\<\(\x\{1,4}:\)\{5}:\(\(\x\{1,4}:\)\{,1}\x\{1,4}\|\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\>/
+"   1111:2:3:4:5:6::8           -
+syn match       zoneIP6Addr     contained /\<\(\x\{1,4}:\)\{6}:\x\{1,4}\>/
+"   1111[:...]::                -
+syn match       zoneIP6Addr     contained /\<\(\x\{1,4}:\)\{1,7}:\(\s\|;\|$\)\@=/
 
-syn match	zoneTTL	contained /\<[0-9HhWwDd]\+\s\+/ nextgroup=zoneClass,zoneRRType
-syn match	zoneRRType	contained /\s*\<\(NS\|HINFO\)\s\+/ nextgroup=zoneSpecial,zoneDomain
-syn match	zoneRRType	contained /\s*\<CNAME\s\+/ nextgroup=zoneDomain,zoneSpecial
-syn match	zoneRRType	contained /\s*\<SOA\s\+/ nextgroup=zoneDomain,zoneIllegalDom
-syn match	zoneRRType	contained /\s*\<PTR\s\+/ nextgroup=zoneDomain,zoneIllegalDom
-syn match	zoneRRType	contained /\s*\<MX\s\+/ nextgroup=zoneMailPrio
-syn match	zoneRRType	contained /\s*\<A\s\+/ nextgroup=zoneIPaddr,zoneIllegalDom
+syn match       zoneText        contained /"\([^"\\]\|\\.\)*"\(\s\|;\|$\)\@=/
+syn match       zoneNumber      contained /\<[0-9]\+\(\s\|;\|$\)\@=/
+syn match       zoneSerial      contained /\<[0-9]\{9,10}\(\s\|;\|$\)\@=/
 
-" FIXME: catchup serial number
-syn match	zoneSerial	contained /\<[0-9]\{9}\>/
-
-syn match	zoneMailPrio	contained /\<[0-9]\+\s*/ nextgroup=zoneDomain,zoneIllegalDom
-syn match	zoneErrParen	/)/
-syn region	zoneParen	contained start=+(+ end=+)+ contains=zoneSerial,zoneTTL,zoneComment
-syn match	zoneComment	";.*"
+syn match       zoneErrParen    /)/
+syn region      zoneParen       contained start="(" end=")" contains=zoneSerial,zoneNumber,zoneComment
+syn match       zoneComment     /;.*/
 
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
@@ -76,23 +80,31 @@ if version >= 508 || !exists("did_bind_z
     command -nargs=+ HiLink hi def link <args>
   endif
 
-  HiLink zoneComment	Comment
-  HiLink zoneDirective	Macro
-  HiLink zoneLHSDomain	Statement
-  HiLink zoneLHSIP	Statement
-  HiLink zoneClass	Include
-  HiLink zoneSpecial	Special
-  HiLink zoneRRType	Type
-  HiLink zoneError	Error
-  HiLink zoneErrParen	Error
-  HiLink zoneIllegalDom	Error
-  HiLink zoneSerial	Todo
-  HiLink zoneIPaddr	Number
-  HiLink zoneDomain	Identifier
+  HiLink zoneDirective    Macro
+  
+  HiLink zoneUnknown      Error
+  
+  HiLink zoneOrigin       Statement
+  HiLink zoneOwnerName    Statement
+  HiLink zoneDomain       Identifier
+  
+  HiLink zoneSpecial      Special
+  HiLink zoneTTL          Constant
+  HiLink zoneClass        Include
+  HiLink zoneRRType       Type
+  
+  HiLink zoneIPAddr       Number
+  HiLink zoneIP6Addr      Number
+  HiLink zoneText         String
+  HiLink zoneNumber       Number
+  HiLink zoneSerial       Special
+  
+  HiLink zoneErrParen     Error
+  HiLink zoneComment      Comment
 
   delcommand HiLink
 endif
 
 let b:current_syntax = "bindzone"
 
-" vim: ts=17
+" vim:sts=2 sw=2
--- a/runtime/syntax/crontab.vim
+++ b/runtime/syntax/crontab.vim
@@ -1,10 +1,12 @@
 " Vim syntax file
-" Language:	crontab
-" Maintainer:	John Hoelzel johnh51@users.sourceforge.net
-" Maintainer:	David Necas (Yeti) <yeti@physics.muni.cz>
-" Last Change:	2005-04-26
-" Filenames:	/tmp/crontab.* used by "crontab -e"
-" URL:		http://trific.ath.cx/Ftp/vim/syntax/crontab.vim
+" Language: crontab
+" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
+" Original Maintainer: John Hoelzel johnh51@users.sourceforge.net
+" License: This file can be redistribued and/or modified under the same terms
+"   as Vim itself.
+" Filenames: /tmp/crontab.* used by "crontab -e"
+" URL: http://trific.ath.cx/Ftp/vim/syntax/crontab.vim
+" Last Change: 2006-04-20
 "
 " crontab line format:
 " Minutes   Hours   Days   Months   Days_of_Week   Commands # comments
@@ -17,24 +19,23 @@ elseif exists("b:current_syntax")
   finish
 endif
 
-syntax match  crontabMin     "^\s*[-0-9/,.*]\+"  nextgroup=crontabHr   skipwhite
-syntax match  crontabHr       "\s[-0-9/,.*]\+"  nextgroup=crontabDay  skipwhite contained
-syntax match  crontabDay      "\s[-0-9/,.*]\+"  nextgroup=crontabMnth skipwhite contained
+syntax match crontabMin "^\s*[-0-9/,.*]\+" nextgroup=crontabHr skipwhite
+syntax match crontabHr "\s[-0-9/,.*]\+" nextgroup=crontabDay skipwhite contained
+syntax match crontabDay "\s[-0-9/,.*]\+" nextgroup=crontabMnth skipwhite contained
 
-syntax match  crontabMnth  "\s[-a-z0-9/,.*]\+"  nextgroup=crontabDow  skipwhite contained
-syntax keyword crontabMnth12 contained   jan feb mar apr may jun jul aug sep oct nov dec
+syntax match crontabMnth "\s[-a-z0-9/,.*]\+" nextgroup=crontabDow skipwhite contained
+syntax keyword crontabMnth12 contained jan feb mar apr may jun jul aug sep oct nov dec
 
-syntax match  crontabDow   "\s[-a-z0-9/,.*]\+"  nextgroup=crontabCmd  skipwhite contained
-syntax keyword crontabDow7   contained    sun mon tue wed thu fri sat
-
-"  syntax region crontabCmd  start="\<[a-z0-9\/\(]" end="$" nextgroup=crontabCmnt skipwhite contained contains=crontabCmnt keepend
+syntax match crontabDow "\s[-a-z0-9/,.*]\+" nextgroup=crontabCmd skipwhite contained
+syntax keyword crontabDow7 contained sun mon tue wed thu fri sat
 
-syntax region crontabCmd  start="\S" end="$" nextgroup=crontabCmnt skipwhite contained keepend
-syntax match  crontabCmnt "^\s*#.*"
+syntax region crontabCmd start="\S" end="$" skipwhite contained keepend contains=crontabPercent
+syntax match crontabCmnt "^\s*#.*"
+syntax match crontabPercent "[^\\]%.*"lc=1 contained
 
-syntax match  crontabNick  "^\s*@\(reboot\|yearly\|annually\|monthly\|weekly\|daily\|midnight\|hourly\)\>" nextgroup=crontabCmd skipwhite
+syntax match crontabNick "^\s*@\(reboot\|yearly\|annually\|monthly\|weekly\|daily\|midnight\|hourly\)\>" nextgroup=crontabCmd skipwhite
 
-syntax match  crontabVar  "^\s*\k\w*\s*="me=e-1
+syntax match crontabVar "^\s*\k\w*\s*="me=e-1
 
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
@@ -63,9 +64,10 @@ if version >= 508 || !exists("did_cronta
 
   HiLink crontabNick		Special
   HiLink crontabVar		Identifier
+  HiLink crontabPercent		Special
 
 " comment out next line for to suppress unix commands coloring.
-  HiLink crontabCmd		Type
+  HiLink crontabCmd		Statement
 
   HiLink crontabCmnt		Comment
 
--- a/runtime/syntax/inform.vim
+++ b/runtime/syntax/inform.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:     Inform
-" Maintainer:   Stephen Thomas (informvim@stephenthomas.uklinux.net)
-" URL:		http://www.stephenthomas.uklinux.net/informvim
-" Last Change:  2004 May 16
+" Maintainer:   Stephen Thomas (stephen@gowarthomas.com)
+" URL:		http://www.gowarthomas.com/informvim
+" Last Change:  2006 April 20
 
 " Quit when a syntax file was already loaded
 if version < 600
--- a/runtime/syntax/lua.vim
+++ b/runtime/syntax/lua.vim
@@ -1,297 +1,299 @@
-" Vim syntax file
-" Language:	Lua 4.0, Lua 5.0 and Lua 5.1
-" Maintainer:	Marcus Aurelius Farias <marcus.cf 'at' bol.com.br>
-" First Author:	Carlos Augusto Teixeira Mendes <cmendes 'at' inf puc-rio br>
-" Last Change:	2006 Apr. 19
-" Options:	lua_version = 4 or 5
-"		lua_subversion = 0 (4.0, 5.0) or 1 (5.1)
-"		default 5.1
-
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
-  finish
-endif
-
-if !exists("lua_version")
-  " Default is lua 5.1
-  let lua_version = 5
-  let lua_subversion = 1
-elseif !exists("lua_subversion")
-  " lua_version exists, but lua_subversion doesn't. So, set it to 0
-  let lua_subversion = 0
-endif
-
-syn case match
-
-" syncing method
-syn sync minlines=100
-
-" Comments
-syn keyword luaTodo             contained TODO FIXME XXX
-syn match   luaComment          "--.*$" contains=luaTodo
-if lua_version == 5 && lua_subversion == 0
-  syn region  luaComment        matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment
-  syn region  luaInnerComment   contained transparent start="\[\[" end="\]\]"
-elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
-  " Comments in Lua 5.1: [[ ... ]], [=[ ... ]=], [===[ ... ]===], etc.
-  syn region  luaComment        matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]"
-endif
-
-" First line may start with #!
-syn match luaComment "\%^#!.*"
-
-" catch errors caused by wrong parenthesis and wrong curly brackets or
-" keywords placed outside their respective blocks
-
-syn region luaParen transparent start='(' end=')' contains=ALLBUT,luaError,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
-syn match  luaError ")"
-syn match  luaError "}"
-syn match  luaError "\<\%(end\|else\|elseif\|then\|until\|in\)\>"
-
-" Function declaration
-syn region luaFunctionBlock transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
-
-" if then else elseif end
-syn keyword luaCond contained else
-
-" then ... end
-syn region luaCondEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaRepeat
-
-" elseif ... then
-syn region luaCondElseif contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
-
-" if ... then
-syn region luaCondStart transparent matchgroup=luaCond start="\<if\>" end="\<then\>"me=e-4 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaCondEnd skipwhite skipempty
-
-" do ... end
-syn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
-
-" repeat ... until
-syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
-
-" while ... do
-syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<while\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaBlock skipwhite skipempty
-
-" for ... do and for ... in ... do
-syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd nextgroup=luaBlock skipwhite skipempty
-
-" Following 'else' example. This is another item to those
-" contains=ALLBUT,... because only the 'for' luaRepeatBlock contains it.
-syn keyword luaRepeat contained in
-
-" other keywords
-syn keyword luaStatement return local break
-syn keyword luaOperator  and or not
-syn keyword luaConstant  nil
-if lua_version > 4
-  syn keyword luaConstant true false
-endif
-
-" Strings
-syn match  luaSpecial contained "\\[\\abfnrtv\'\"[\]]\|\\\d\{,3}"
-syn region luaString  start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial
-syn region luaString  start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial
-" Nested strings
-if (lua_version == 5 && lua_subversion == 0) || lua_version < 5
-  syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2
-elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
-  syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]"
-endif
-
-" integer number
-syn match luaNumber "\<[0-9]\+\>"
-" floating point number, with dot, optional exponent
-syn match luaFloat  "\<[0-9]\+\.[0-9]*\%(e[-+]\=[0-9]\+\)\=\>"
-" floating point number, starting with a dot, optional exponent
-syn match luaFloat  "\.[0-9]\+\%(e[-+]\=[0-9]\+\)\=\>"
-" floating point number, without dot, with exponent
-syn match luaFloat  "\<[0-9]\+e[-+]\=[0-9]\+\>"
-
-" tables
-syn region  luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
-
-syn keyword luaFunc assert collectgarbage dofile error gcinfo next
-syn keyword luaFunc print rawget rawset tonumber tostring type _VERSION
-
-if lua_version == 4
-  syn keyword luaFunc _ALERT _ERRORMESSAGE
-  syn keyword luaFunc call copytagmethods dostring
-  syn keyword luaFunc foreach foreachi getglobal getn
-  syn keyword luaFunc gettagmethod globals newtag
-  syn keyword luaFunc setglobal settag settagmethod sort
-  syn keyword luaFunc tag tinsert tremove
-  syn keyword luaFunc _INPUT _OUTPUT _STDIN _STDOUT _STDERR
-  syn keyword luaFunc openfile closefile flush seek
-  syn keyword luaFunc setlocale execute remove rename tmpname
-  syn keyword luaFunc getenv date clock exit
-  syn keyword luaFunc readfrom writeto appendto read write
-  syn keyword luaFunc PI abs sin cos tan asin
-  syn keyword luaFunc acos atan atan2 ceil floor
-  syn keyword luaFunc mod frexp ldexp sqrt min max log
-  syn keyword luaFunc log10 exp deg rad random
-  syn keyword luaFunc randomseed strlen strsub strlower strupper
-  syn keyword luaFunc strchar strrep ascii strbyte
-  syn keyword luaFunc format strfind gsub
-  syn keyword luaFunc getinfo getlocal setlocal setcallhook setlinehook
-elseif lua_version == 5
-  " Not sure if all these functions need to be highlighted...
-  syn keyword luaFunc _G getfenv getmetatable ipairs loadfile
-  syn keyword luaFunc loadstring pairs pcall rawequal
-  syn keyword luaFunc require setfenv setmetatable unpack xpcall
-  if lua_subversion == 0
-    syn keyword luaFunc loadlib LUA_PATH _LOADED _REQUIREDNAME
-  elseif lua_subversion == 1
-    syn keyword luaFunc load module select
-    syn match luaFunc /package\.cpath/
-    syn match luaFunc /package\.loaded/
-    syn match luaFunc /package\.loadlib/
-    syn match luaFunc /package\.path/
-    syn match luaFunc /package\.preload/
-    syn match luaFunc /package\.seeall/
-    syn match luaFunc /coroutine\.running/
-  endif
-  syn match   luaFunc /coroutine\.create/
-  syn match   luaFunc /coroutine\.resume/
-  syn match   luaFunc /coroutine\.status/
-  syn match   luaFunc /coroutine\.wrap/
-  syn match   luaFunc /coroutine\.yield/
-  syn match   luaFunc /string\.byte/
-  syn match   luaFunc /string\.char/
-  syn match   luaFunc /string\.dump/
-  syn match   luaFunc /string\.find/
-  syn match   luaFunc /string\.len/
-  syn match   luaFunc /string\.lower/
-  syn match   luaFunc /string\.rep/
-  syn match   luaFunc /string\.sub/
-  syn match   luaFunc /string\.upper/
-  syn match   luaFunc /string\.format/
-  syn match   luaFunc /string\.gsub/
-  if lua_subversion == 0
-    syn match luaFunc /string\.gfind/
-  elseif lua_subversion == 1
-    syn match luaFunc /string\.gmatch/
-    syn match luaFunc /string\.match/
-    syn match luaFunc /string\.reverse/
-    syn match luaFunc /table\.maxn/
-  endif
-  syn match   luaFunc /table\.concat/
-  syn match   luaFunc /table\.foreach/
-  syn match   luaFunc /table\.foreachi/
-  syn match   luaFunc /table\.getn/
-  syn match   luaFunc /table\.sort/
-  syn match   luaFunc /table\.insert/
-  syn match   luaFunc /table\.remove/
-  syn match   luaFunc /table\.setn/
-  syn match   luaFunc /math\.abs/
-  syn match   luaFunc /math\.acos/
-  syn match   luaFunc /math\.asin/
-  syn match   luaFunc /math\.atan/
-  syn match   luaFunc /math\.atan2/
-  syn match   luaFunc /math\.ceil/
-  syn match   luaFunc /math\.sin/
-  syn match   luaFunc /math\.cos/
-  syn match   luaFunc /math\.tan/
-  syn match   luaFunc /math\.deg/
-  syn match   luaFunc /math\.exp/
-  syn match   luaFunc /math\.floor/
-  syn match   luaFunc /math\.log/
-  syn match   luaFunc /math\.log10/
-  syn match   luaFunc /math\.max/
-  syn match   luaFunc /math\.min/
-  if lua_subversion == 0
-    syn match luaFunc /math\.mod/
-  elseif lua_subversion == 1
-    syn match luaFunc /math\.fmod/
-    syn match luaFunc /math\.modf/
-    syn match luaFunc /math\.cosh/
-    syn match luaFunc /math\.sinh/
-    syn match luaFunc /math\.tanh/
-  endif
-  syn match   luaFunc /math\.pow/
-  syn match   luaFunc /math\.rad/
-  syn match   luaFunc /math\.sqrt/
-  syn match   luaFunc /math\.frexp/
-  syn match   luaFunc /math\.ldexp/
-  syn match   luaFunc /math\.random/
-  syn match   luaFunc /math\.randomseed/
-  syn match   luaFunc /math\.pi/
-  syn match   luaFunc /io\.stdin/
-  syn match   luaFunc /io\.stdout/
-  syn match   luaFunc /io\.stderr/
-  syn match   luaFunc /io\.close/
-  syn match   luaFunc /io\.flush/
-  syn match   luaFunc /io\.input/
-  syn match   luaFunc /io\.lines/
-  syn match   luaFunc /io\.open/
-  syn match   luaFunc /io\.output/
-  syn match   luaFunc /io\.popen/
-  syn match   luaFunc /io\.read/
-  syn match   luaFunc /io\.tmpfile/
-  syn match   luaFunc /io\.type/
-  syn match   luaFunc /io\.write/
-  syn match   luaFunc /os\.clock/
-  syn match   luaFunc /os\.date/
-  syn match   luaFunc /os\.difftime/
-  syn match   luaFunc /os\.execute/
-  syn match   luaFunc /os\.exit/
-  syn match   luaFunc /os\.getenv/
-  syn match   luaFunc /os\.remove/
-  syn match   luaFunc /os\.rename/
-  syn match   luaFunc /os\.setlocale/
-  syn match   luaFunc /os\.time/
-  syn match   luaFunc /os\.tmpname/
-  syn match   luaFunc /debug\.debug/
-  syn match   luaFunc /debug\.gethook/
-  syn match   luaFunc /debug\.getinfo/
-  syn match   luaFunc /debug\.getlocal/
-  syn match   luaFunc /debug\.getupvalue/
-  syn match   luaFunc /debug\.setlocal/
-  syn match   luaFunc /debug\.setupvalue/
-  syn match   luaFunc /debug\.sethook/
-  syn match   luaFunc /debug\.traceback/
-  if lua_subversion == 1
-    syn match luaFunc /debug\.getfenv/
-    syn match luaFunc /debug\.getmetatable/
-    syn match luaFunc /debug\.getregistry/
-    syn match luaFunc /debug\.setfenv/
-    syn match luaFunc /debug\.setmetatable/
-  endif
-endif
-
-" Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_lua_syntax_inits")
-  if version < 508
-    let did_lua_syntax_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
-
-  HiLink luaStatement		Statement
-  HiLink luaRepeat		Repeat
-  HiLink luaString		String
-  HiLink luaString2		String
-  HiLink luaNumber		Number
-  HiLink luaFloat		Float
-  HiLink luaOperator		Operator
-  HiLink luaConstant		Constant
-  HiLink luaCond		Conditional
-  HiLink luaFunction		Function
-  HiLink luaComment		Comment
-  HiLink luaTodo		Todo
-  HiLink luaTable		Structure
-  HiLink luaError		Error
-  HiLink luaSpecial		SpecialChar
-  HiLink luaFunc		Identifier
-
-  delcommand HiLink
-endif
-
-let b:current_syntax = "lua"
-
-" vim: et ts=8
+" Vim syntax file
+" Language:	Lua 4.0, Lua 5.0 and Lua 5.1
+" Maintainer:	Marcus Aurelius Farias <marcus.cf 'at' bol com br>
+" First Author:	Carlos Augusto Teixeira Mendes <cmendes 'at' inf puc-rio br>
+" Last Change:	2006 Apr 21
+" Options:	lua_version = 4 or 5
+"		lua_subversion = 0 (4.0, 5.0) or 1 (5.1)
+"		default 5.1
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+if !exists("lua_version")
+  " Default is lua 5.1
+  let lua_version = 5
+  let lua_subversion = 1
+elseif !exists("lua_subversion")
+  " lua_version exists, but lua_subversion doesn't. So, set it to 0
+  let lua_subversion = 0
+endif
+
+syn case match
+
+" syncing method
+syn sync minlines=100
+
+" Comments
+syn keyword luaTodo             contained TODO FIXME XXX
+syn match   luaComment          "--.*$" contains=luaTodo
+if lua_version == 5 && lua_subversion == 0
+  syn region  luaComment        matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment
+  syn region  luaInnerComment   contained transparent start="\[\[" end="\]\]"
+elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
+  " Comments in Lua 5.1: --[[ ... ]], [=[ ... ]=], [===[ ... ]===], etc.
+  syn region  luaComment        matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]"
+endif
+
+" First line may start with #!
+syn match luaComment "\%^#!.*"
+
+" catch errors caused by wrong parenthesis and wrong curly brackets or
+" keywords placed outside their respective blocks
+
+syn region luaParen transparent start='(' end=')' contains=ALLBUT,luaError,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
+syn match  luaError ")"
+syn match  luaError "}"
+syn match  luaError "\<\%(end\|else\|elseif\|then\|until\|in\)\>"
+
+" Function declaration
+syn region luaFunctionBlock transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+
+" if then else elseif end
+syn keyword luaCond contained else
+
+" then ... end
+syn region luaCondEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaRepeat
+
+" elseif ... then
+syn region luaCondElseif contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+
+" if ... then
+syn region luaCondStart transparent matchgroup=luaCond start="\<if\>" end="\<then\>"me=e-4 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaCondEnd skipwhite skipempty
+
+" do ... end
+syn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+
+" repeat ... until
+syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+
+" while ... do
+syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<while\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaBlock skipwhite skipempty
+
+" for ... do and for ... in ... do
+syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd nextgroup=luaBlock skipwhite skipempty
+
+" Following 'else' example. This is another item to those
+" contains=ALLBUT,... because only the 'for' luaRepeatBlock contains it.
+syn keyword luaRepeat contained in
+
+" other keywords
+syn keyword luaStatement return local break
+syn keyword luaOperator  and or not
+syn keyword luaConstant  nil
+if lua_version > 4
+  syn keyword luaConstant true false
+endif
+
+" Strings
+if lua_version < 5
+  syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}"
+elseif lua_version == 5 && lua_subversion == 0
+  syn match  luaSpecial contained "\\[\\abfnrtv\'\"[\]]\|\\\d\{,3}"
+  syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2
+elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
+  syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}"
+  syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]"
+endif
+syn region luaString  start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial
+syn region luaString  start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial
+
+" integer number
+syn match luaNumber "\<[0-9]\+\>"
+" floating point number, with dot, optional exponent
+syn match luaFloat  "\<[0-9]\+\.[0-9]*\%(e[-+]\=[0-9]\+\)\=\>"
+" floating point number, starting with a dot, optional exponent
+syn match luaFloat  "\.[0-9]\+\%(e[-+]\=[0-9]\+\)\=\>"
+" floating point number, without dot, with exponent
+syn match luaFloat  "\<[0-9]\+e[-+]\=[0-9]\+\>"
+
+" tables
+syn region  luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
+
+syn keyword luaFunc assert collectgarbage dofile error next
+syn keyword luaFunc print rawget rawset tonumber tostring type _VERSION
+
+if lua_version == 4
+  syn keyword luaFunc _ALERT _ERRORMESSAGE gcinfo
+  syn keyword luaFunc call copytagmethods dostring
+  syn keyword luaFunc foreach foreachi getglobal getn
+  syn keyword luaFunc gettagmethod globals newtag
+  syn keyword luaFunc setglobal settag settagmethod sort
+  syn keyword luaFunc tag tinsert tremove
+  syn keyword luaFunc _INPUT _OUTPUT _STDIN _STDOUT _STDERR
+  syn keyword luaFunc openfile closefile flush seek
+  syn keyword luaFunc setlocale execute remove rename tmpname
+  syn keyword luaFunc getenv date clock exit
+  syn keyword luaFunc readfrom writeto appendto read write
+  syn keyword luaFunc PI abs sin cos tan asin
+  syn keyword luaFunc acos atan atan2 ceil floor
+  syn keyword luaFunc mod frexp ldexp sqrt min max log
+  syn keyword luaFunc log10 exp deg rad random
+  syn keyword luaFunc randomseed strlen strsub strlower strupper
+  syn keyword luaFunc strchar strrep ascii strbyte
+  syn keyword luaFunc format strfind gsub
+  syn keyword luaFunc getinfo getlocal setlocal setcallhook setlinehook
+elseif lua_version == 5
+  " Not sure if all these functions need to be highlighted...
+  syn keyword luaFunc _G getfenv getmetatable ipairs loadfile
+  syn keyword luaFunc loadstring pairs pcall rawequal
+  syn keyword luaFunc require setfenv setmetatable unpack xpcall
+  if lua_subversion == 0
+    syn keyword luaFunc gcinfo loadlib LUA_PATH _LOADED _REQUIREDNAME
+  elseif lua_subversion == 1
+    syn keyword luaFunc load module select
+    syn match luaFunc /package\.cpath/
+    syn match luaFunc /package\.loaded/
+    syn match luaFunc /package\.loadlib/
+    syn match luaFunc /package\.path/
+    syn match luaFunc /package\.preload/
+    syn match luaFunc /package\.seeall/
+    syn match luaFunc /coroutine\.running/
+  endif
+  syn match   luaFunc /coroutine\.create/
+  syn match   luaFunc /coroutine\.resume/
+  syn match   luaFunc /coroutine\.status/
+  syn match   luaFunc /coroutine\.wrap/
+  syn match   luaFunc /coroutine\.yield/
+  syn match   luaFunc /string\.byte/
+  syn match   luaFunc /string\.char/
+  syn match   luaFunc /string\.dump/
+  syn match   luaFunc /string\.find/
+  syn match   luaFunc /string\.len/
+  syn match   luaFunc /string\.lower/
+  syn match   luaFunc /string\.rep/
+  syn match   luaFunc /string\.sub/
+  syn match   luaFunc /string\.upper/
+  syn match   luaFunc /string\.format/
+  syn match   luaFunc /string\.gsub/
+  if lua_subversion == 0
+    syn match luaFunc /string\.gfind/
+    syn match luaFunc /table\.getn/
+    syn match luaFunc /table\.setn/
+    syn match luaFunc /table\.foreach/
+    syn match luaFunc /table\.foreachi/
+  elseif lua_subversion == 1
+    syn match luaFunc /string\.gmatch/
+    syn match luaFunc /string\.match/
+    syn match luaFunc /string\.reverse/
+    syn match luaFunc /table\.maxn/
+  endif
+  syn match   luaFunc /table\.concat/
+  syn match   luaFunc /table\.sort/
+  syn match   luaFunc /table\.insert/
+  syn match   luaFunc /table\.remove/
+  syn match   luaFunc /math\.abs/
+  syn match   luaFunc /math\.acos/
+  syn match   luaFunc /math\.asin/
+  syn match   luaFunc /math\.atan/
+  syn match   luaFunc /math\.atan2/
+  syn match   luaFunc /math\.ceil/
+  syn match   luaFunc /math\.sin/
+  syn match   luaFunc /math\.cos/
+  syn match   luaFunc /math\.tan/
+  syn match   luaFunc /math\.deg/
+  syn match   luaFunc /math\.exp/
+  syn match   luaFunc /math\.floor/
+  syn match   luaFunc /math\.log/
+  syn match   luaFunc /math\.log10/
+  syn match   luaFunc /math\.max/
+  syn match   luaFunc /math\.min/
+  if lua_subversion == 0
+    syn match luaFunc /math\.mod/
+  elseif lua_subversion == 1
+    syn match luaFunc /math\.fmod/
+    syn match luaFunc /math\.modf/
+    syn match luaFunc /math\.cosh/
+    syn match luaFunc /math\.sinh/
+    syn match luaFunc /math\.tanh/
+  endif
+  syn match   luaFunc /math\.pow/
+  syn match   luaFunc /math\.rad/
+  syn match   luaFunc /math\.sqrt/
+  syn match   luaFunc /math\.frexp/
+  syn match   luaFunc /math\.ldexp/
+  syn match   luaFunc /math\.random/
+  syn match   luaFunc /math\.randomseed/
+  syn match   luaFunc /math\.pi/
+  syn match   luaFunc /io\.stdin/
+  syn match   luaFunc /io\.stdout/
+  syn match   luaFunc /io\.stderr/
+  syn match   luaFunc /io\.close/
+  syn match   luaFunc /io\.flush/
+  syn match   luaFunc /io\.input/
+  syn match   luaFunc /io\.lines/
+  syn match   luaFunc /io\.open/
+  syn match   luaFunc /io\.output/
+  syn match   luaFunc /io\.popen/
+  syn match   luaFunc /io\.read/
+  syn match   luaFunc /io\.tmpfile/
+  syn match   luaFunc /io\.type/
+  syn match   luaFunc /io\.write/
+  syn match   luaFunc /os\.clock/
+  syn match   luaFunc /os\.date/
+  syn match   luaFunc /os\.difftime/
+  syn match   luaFunc /os\.execute/
+  syn match   luaFunc /os\.exit/
+  syn match   luaFunc /os\.getenv/
+  syn match   luaFunc /os\.remove/
+  syn match   luaFunc /os\.rename/
+  syn match   luaFunc /os\.setlocale/
+  syn match   luaFunc /os\.time/
+  syn match   luaFunc /os\.tmpname/
+  syn match   luaFunc /debug\.debug/
+  syn match   luaFunc /debug\.gethook/
+  syn match   luaFunc /debug\.getinfo/
+  syn match   luaFunc /debug\.getlocal/
+  syn match   luaFunc /debug\.getupvalue/
+  syn match   luaFunc /debug\.setlocal/
+  syn match   luaFunc /debug\.setupvalue/
+  syn match   luaFunc /debug\.sethook/
+  syn match   luaFunc /debug\.traceback/
+  if lua_subversion == 1
+    syn match luaFunc /debug\.getfenv/
+    syn match luaFunc /debug\.getmetatable/
+    syn match luaFunc /debug\.getregistry/
+    syn match luaFunc /debug\.setfenv/
+    syn match luaFunc /debug\.setmetatable/
+  endif
+endif
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_lua_syntax_inits")
+  if version < 508
+    let did_lua_syntax_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
+
+  HiLink luaStatement		Statement
+  HiLink luaRepeat		Repeat
+  HiLink luaString		String
+  HiLink luaString2		String
+  HiLink luaNumber		Number
+  HiLink luaFloat		Float
+  HiLink luaOperator		Operator
+  HiLink luaConstant		Constant
+  HiLink luaCond		Conditional
+  HiLink luaFunction		Function
+  HiLink luaComment		Comment
+  HiLink luaTodo		Todo
+  HiLink luaTable		Structure
+  HiLink luaError		Error
+  HiLink luaSpecial		SpecialChar
+  HiLink luaFunc		Identifier
+
+  delcommand HiLink
+endif
+
+let b:current_syntax = "lua"
+
+" vim: et ts=8
--- a/src/INSTALLpc.txt
+++ b/src/INSTALLpc.txt
@@ -143,8 +143,7 @@ is also available through the Platform S
 Visual C++ 2005 Express Edition
 -------------------------------
 
-Visual C++ 2005 Express Edition can be downloaded for free
-before November 2006 from
+Visual C++ 2005 Express Edition can be downloaded for free from:
     http://msdn.microsoft.com/vstudio/express/visualC/default.aspx
 This includes the IDE and the debugger. You will also need
 |ms-platform-sdk|. You can build Vim with Make_mvc.mak.
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -8986,8 +8986,9 @@ if test -z "$SKIP_MOTIF"; then
 
 
 
+
 for ac_header in Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
-		   Xm/UnhighlightT.h
+		   Xm/UnhighlightT.h Xm/Notebook.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -239,6 +239,7 @@
 #undef HAVE_XM_MANAGER_H
 #undef HAVE_XM_UNHIGHLIGHTT_H
 #undef HAVE_XM_JOINSIDET_H
+#undef HAVE_XM_NOTEBOOK_H
 #undef HAVE_X11_XPM_H
 #undef HAVE_X11_XMU_EDITRES_H
 #undef HAVE_X11_SM_SMLIB_H
--- a/src/configure.in
+++ b/src/configure.in
@@ -1901,7 +1901,7 @@ if test -z "$SKIP_MOTIF"; then
   cppflags_save=$CPPFLAGS
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   AC_CHECK_HEADERS(Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
-		   Xm/UnhighlightT.h)
+		   Xm/UnhighlightT.h Xm/Notebook.h)
 
   if test $ac_cv_header_Xm_XpmP_h = yes; then
     dnl Solaris uses XpmAttributes_21, very annoying.
--- a/src/eval.c
+++ b/src/eval.c
@@ -8863,7 +8863,6 @@ f_expand(argvars, rettv)
 	    ExpandInit(&xpc);
 	    xpc.xp_context = EXPAND_FILES;
 	    rettv->vval.v_string = ExpandOne(&xpc, s, NULL, flags, WILD_ALL);
-	    ExpandCleanup(&xpc);
 	}
 	else
 	    rettv->vval.v_string = NULL;
@@ -10397,7 +10396,6 @@ f_glob(argvars, rettv)
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
 				     NULL, WILD_USE_NL|WILD_SILENT, WILD_ALL);
-    ExpandCleanup(&xpc);
 }
 
 /*
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -4371,7 +4371,6 @@ expand_filename(eap, cmdlinep, errormsgp
 		    p = ExpandOne(&xpc, eap->arg, NULL,
 					    WILD_LIST_NOTFOUND|WILD_ADD_SLASH,
 						   WILD_EXPAND_FREE);
-		    ExpandCleanup(&xpc);
 		    if (p == NULL)
 			return FAIL;
 		}
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -3260,7 +3260,8 @@ nextwild(xp, type, options)
  * Return a pointer to alloced memory containing the new string.
  * Return NULL for failure.
  *
- * Results are cached in xp->xp_files and xp->xp_numfiles.
+ * Results are cached in xp->xp_files and xp->xp_numfiles, except when "mode"
+ * is WILD_EXPAND_FREE or WILD_ALL.
  *
  * mode = WILD_FREE:	    just free previously expanded matches
  * mode = WILD_EXPAND_FREE: normal expansion, do not keep matches
--- a/src/feature.h
+++ b/src/feature.h
@@ -753,7 +753,8 @@
 /*
  * GUI tabline
  */
-#if defined(FEAT_WINDOWS) && (defined(FEAT_GUI_GTK) || defined(FEAT_GUI_MOTIF)\
+#if defined(FEAT_WINDOWS) && (defined(FEAT_GUI_GTK) \
+	|| (defined(FEAT_GUI_MOTIF) && defined(HAVE_XM_NOTEBOOK_H)) \
 	|| (defined(FEAT_GUI_MSWIN) && (!defined(_MSC_VER) || _MSC_VER > 1020)))
 # define FEAT_GUI_TABLINE
 #endif
--- a/src/gui.c
+++ b/src/gui.c
@@ -3491,7 +3491,7 @@ get_tabline_label(tp)
 /*
  * Send the event for clicking to select tab page "nr".
  * Returns TRUE if it was done, FALSE when skipped because we are already at
- * that tab page.
+ * that tab page or the cmdline window is open.
  */
     int
 send_tabline_event(nr)
@@ -3501,6 +3501,14 @@ send_tabline_event(nr)
 
     if (nr == tabpage_index(curtab))
 	return FALSE;
+# ifdef FEAT_CMDWIN
+    if (cmdwin_type != 0)
+    {
+	/* Set it back to the current tab page. */
+	gui_mch_set_curtab(tabpage_index(curtab));
+	return FALSE;
+    }
+# endif
     string[0] = CSI;
     string[1] = KS_TABLINE;
     string[2] = KE_FILLER;
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -48,6 +48,11 @@
 
 /* Vim's Scrap flavor. */
 #define VIMSCRAPFLAVOR 'VIM!'
+#ifdef FEAT_MBYTE
+# define SCRAPTEXTFLAVOR kScrapFlavorTypeUnicode
+#else
+# define SCRAPTEXTFLAVOR kScrapFlavorTypeText
+#endif
 
 static EventHandlerUPP mouseWheelHandlerUPP = NULL;
 SInt32 gMacSystemVersion;
@@ -4427,69 +4432,65 @@ clip_mch_request_selection(VimClipboard 
 
     if (flavor == 0)
     {
-	error = GetScrapFlavorFlags(scrap, kScrapFlavorTypeUnicode, &scrapFlags);
+	error = GetScrapFlavorFlags(scrap, SCRAPTEXTFLAVOR, &scrapFlags);
 	if (error != noErr)
 	    return;
 
-	error = GetScrapFlavorSize(scrap, kScrapFlavorTypeUnicode, &scrapSize);
+	error = GetScrapFlavorSize(scrap, SCRAPTEXTFLAVOR, &scrapSize);
 	if (error != noErr)
 	    return;
     }
 
     ReserveMem(scrapSize);
 
-    {
-	/* In CARBON we don't need a Handle, a pointer is good */
-	textOfClip = NewHandle(scrapSize);
-	/* tempclip = lalloc(scrapSize+1, TRUE); */
-	HLock(textOfClip);
-	error = GetScrapFlavorData(scrap,
-		flavor ? VIMSCRAPFLAVOR : kScrapFlavorTypeUnicode,
-		&scrapSize, *textOfClip);
-	scrapSize -= flavor;
-
-	if (flavor)
-	    type = **textOfClip;
-	else
-	    type = (strchr(*textOfClip, '\r') != NULL) ? MLINE : MCHAR;
-
-	tempclip = lalloc(scrapSize + 1, TRUE);
-#if defined(FEAT_MBYTE)
-	mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
-#else
-	STRNCPY(tempclip, *textOfClip + flavor, scrapSize);
-#endif
-	tempclip[scrapSize] = 0;
+    /* In CARBON we don't need a Handle, a pointer is good */
+    textOfClip = NewHandle(scrapSize);
+
+    /* tempclip = lalloc(scrapSize+1, TRUE); */
+    HLock(textOfClip);
+    error = GetScrapFlavorData(scrap,
+	    flavor ? VIMSCRAPFLAVOR : SCRAPTEXTFLAVOR,
+	    &scrapSize, *textOfClip);
+    scrapSize -= flavor;
+
+    if (flavor)
+	type = **textOfClip;
+    else
+	type = (strchr(*textOfClip, '\r') != NULL) ? MLINE : MCHAR;
+
+    tempclip = lalloc(scrapSize + 1, TRUE);
+    mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
+    tempclip[scrapSize] = 0;
 
 #ifdef MACOS_CONVERT
+    {
 	/* Convert from utf-16 (clipboard) */
 	size_t encLen = 0;
 	char_u *to = mac_utf16_to_enc((UniChar *)tempclip, scrapSize, &encLen);
-	if (to)
+
+	if (to != NULL)
 	{
 	    scrapSize = encLen;
 	    vim_free(tempclip);
 	    tempclip = to;
 	}
+    }
 #endif
 
-	searchCR = (char *)tempclip;
-	while (searchCR != NULL)
-	{
-	    searchCR = strchr(searchCR, '\r');
-
-	    if (searchCR != NULL)
-		searchCR[0] = '\n';
-
-	}
-
-	clip_yank_selection(type, tempclip, scrapSize, cbd);
-
-	vim_free(tempclip);
-	HUnlock(textOfClip);
-
-	DisposeHandle(textOfClip);
+    searchCR = (char *)tempclip;
+    while (searchCR != NULL)
+    {
+	searchCR = strchr(searchCR, '\r');
+	if (searchCR != NULL)
+	    *searchCR = '\n';
     }
+
+    clip_yank_selection(type, tempclip, scrapSize, cbd);
+
+    vim_free(tempclip);
+    HUnlock(textOfClip);
+
+    DisposeHandle(textOfClip);
 }
 
     void
@@ -4527,12 +4528,10 @@ clip_mch_set_selection(VimClipboard *cbd
     /*
      * Once we set the clipboard, lose ownership.  If another application sets
      * the clipboard, we don't want to think that we still own it.
-     *
      */
-
     cbd->owned = FALSE;
 
-    type = clip_convert_selection(&str, (long_u *) &scrapSize, cbd);
+    type = clip_convert_selection(&str, (long_u *)&scrapSize, cbd);
 
 #ifdef MACOS_CONVERT
     size_t utf16_len = 0;
@@ -4555,7 +4554,7 @@ clip_mch_set_selection(VimClipboard *cbd
 	**textOfClip = type;
 	mch_memmove(*textOfClip + 1, str, scrapSize);
 	GetCurrentScrap(&scrap);
-	PutScrapFlavor(scrap, kScrapFlavorTypeUnicode, kScrapFlavorMaskNone,
+	PutScrapFlavor(scrap, SCRAPTEXTFLAVOR, kScrapFlavorMaskNone,
 		scrapSize, *textOfClip + 1);
 	PutScrapFlavor(scrap, VIMSCRAPFLAVOR, kScrapFlavorMaskNone,
 		scrapSize + 1, *textOfClip);
--- a/src/gui_motif.c
+++ b/src/gui_motif.c
@@ -26,7 +26,6 @@
 #include <Xm/LabelG.h>
 #include <Xm/ToggleBG.h>
 #include <Xm/SeparatoG.h>
-#include <Xm/Notebook.h>
 #include <Xm/XmP.h>
 
 #include <X11/keysym.h>
@@ -43,6 +42,9 @@
 #  include <Xm/XpmP.h>
 # endif
 #endif
+#ifdef HAVE_XM_NOTEBOOK_H
+# include <Xm/Notebook.h>
+#endif
 
 #include "gui_xmebw.h"	/* for our Enhanced Button Widget */
 
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -2296,18 +2296,26 @@ gui_mch_update_tabline(void)
     int		curtabidx = 0;
     RECT	rc;
 #ifdef FEAT_MBYTE
+    static int	use_unicode = FALSE;
+    int		uu;
     WCHAR	*wstr = NULL;
 #endif
 
     if (s_tabhwnd == NULL)
 	return;
 
-#if defined(FEAT_MBYTE) && defined(CCM_SETUNICODEFORMAT)
-    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-	/*
-	 * Enable unicode support
-	 */
-	SendMessage(s_tabhwnd, CCM_SETUNICODEFORMAT, (WPARAM)TRUE, (LPARAM)0);
+#if defined(FEAT_MBYTE)
+# ifndef CCM_SETUNICODEFORMAT
+    /* For older compilers.  We assume this never changes. */
+#  define CCM_SETUNICODEFORMAT 0x2005
+# endif
+    uu = (enc_codepage >= 0 && (int)GetACP() != enc_codepage);
+    if (uu != use_unicode)
+    {
+	/* Enable/disable unicode support */
+	SendMessage(s_tabhwnd, CCM_SETUNICODEFORMAT, (WPARAM)uu, (LPARAM)0);
+	use_unicode = uu;
+    }
 #endif
 
     tie.mask = TCIF_TEXT;
@@ -2330,7 +2338,7 @@ gui_mch_update_tabline(void)
 	tie.pszText = NameBuff;
 #ifdef FEAT_MBYTE
 	wstr = NULL;
-	if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+	if (use_unicode)
 	{
 	    /* Need to go through Unicode. */
 	    wstr = enc_to_ucs2(NameBuff, NULL);
--- a/src/memline.c
+++ b/src/memline.c
@@ -1532,7 +1532,7 @@ recover_names(fname, list, nr)
 			files[i] = files[i + 1];
 		}
 	}
-	if (nr)
+	if (nr > 0)
 	{
 	    file_count += num_files;
 	    if (nr <= file_count)
@@ -1578,7 +1578,8 @@ recover_names(fname, list, nr)
 
 	for (i = 0; i < num_names; ++i)
 	    vim_free(names[i]);
-	FreeWild(num_files, files);
+	if (num_files > 0)
+	    FreeWild(num_files, files);
     }
     vim_free(dir_name);
     return file_count;
--- a/src/menu.c
+++ b/src/menu.c
@@ -2336,20 +2336,23 @@ ex_menutranslate(eap)
 	    {
 		tp = (menutrans_T *)menutrans_ga.ga_data;
 		from = vim_strsave(from);
-		from_noamp = menu_text(from, NULL, NULL);
-		to = vim_strnsave(to, (int)(arg - to));
-		if (from != NULL && from_noamp != NULL && to != NULL)
+		if (from != NULL)
 		{
-		    tp[menutrans_ga.ga_len].from = from;
-		    tp[menutrans_ga.ga_len].from_noamp = from_noamp;
-		    tp[menutrans_ga.ga_len].to = to;
-		    ++menutrans_ga.ga_len;
-		}
-		else
-		{
-		    vim_free(from);
-		    vim_free(from_noamp);
-		    vim_free(to);
+		    from_noamp = menu_text(from, NULL, NULL);
+		    to = vim_strnsave(to, (int)(arg - to));
+		    if (from_noamp != NULL && to != NULL)
+		    {
+			tp[menutrans_ga.ga_len].from = from;
+			tp[menutrans_ga.ga_len].from_noamp = from_noamp;
+			tp[menutrans_ga.ga_len].to = to;
+			++menutrans_ga.ga_len;
+		    }
+		    else
+		    {
+			vim_free(from);
+			vim_free(from_noamp);
+			vim_free(to);
+		    }
 		}
 	    }
 	}
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -3625,7 +3625,6 @@ expand_env_esc(srcp, dst, dstlen, esc, s
 		    xpc.xp_context = EXPAND_FILES;
 		    var = ExpandOne(&xpc, dst, NULL,
 				WILD_ADD_SLASH|WILD_SILENT, WILD_EXPAND_FREE);
-		    ExpandCleanup(&xpc);
 		    mustfree = TRUE;
 		}
 
@@ -9363,7 +9362,7 @@ FreeWild(count, files)
     int	    count;
     char_u  **files;
 {
-    if (files == NULL || count <= 0)
+    if (count <= 0 || files == NULL)
 	return;
 #if defined(__EMX__) && defined(__ALWAYS_HAS_TRAILING_NULL_POINTER) /* XXX */
     /*
--- a/src/option.c
+++ b/src/option.c
@@ -2996,35 +2996,44 @@ set_init_1()
      * 'maxmemtot' and 'maxmem' may have to be adjusted for available memory
      */
     opt_idx = findoption((char_u *)"maxmemtot");
+    if (opt_idx >= 0)
+    {
 #if !defined(HAVE_AVAIL_MEM) && !defined(HAVE_TOTAL_MEM)
-    if (options[opt_idx].def_val[VI_DEFAULT] == (char_u *)0L)
-#endif
-    {
+	if (options[opt_idx].def_val[VI_DEFAULT] == (char_u *)0L)
+#endif
+	{
 #ifdef HAVE_AVAIL_MEM
-	/* Use amount of memory available at this moment. */
-	n = (mch_avail_mem(FALSE) >> 11);
+	    /* Use amount of memory available at this moment. */
+	    n = (mch_avail_mem(FALSE) >> 11);
 #else
 # ifdef HAVE_TOTAL_MEM
-	/* Use amount of memory available to Vim. */
-	n = (mch_total_mem(FALSE) >> 11);
+	    /* Use amount of memory available to Vim. */
+	    n = (mch_total_mem(FALSE) >> 11);
 # else
-	n = (0x7fffffff >> 11);
+	    n = (0x7fffffff >> 11);
 # endif
 #endif
-	options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
-	opt_idx = findoption((char_u *)"maxmem");
-#if !defined(HAVE_AVAIL_MEM) && !defined(HAVE_TOTAL_MEM)
-	if ((long)options[opt_idx].def_val[VI_DEFAULT] > n
-			  || (long)options[opt_idx].def_val[VI_DEFAULT] == 0L)
-#endif
 	    options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
+	    opt_idx = findoption((char_u *)"maxmem");
+	    if (opt_idx >= 0)
+	    {
+#if !defined(HAVE_AVAIL_MEM) && !defined(HAVE_TOTAL_MEM)
+		if ((long)options[opt_idx].def_val[VI_DEFAULT] > n
+			|| (long)options[opt_idx].def_val[VI_DEFAULT] == 0L)
+#endif
+		    options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
+	    }
+	}
     }
 
 #ifdef FEAT_GUI_W32
     /* force 'shortname' for Win32s */
     if (gui_is_win32s())
-	options[findoption((char_u *)"shortname")].def_val[VI_DEFAULT] =
-							       (char_u *)TRUE;
+    {
+	opt_idx = findoption((char_u *)"shortname");
+	if (opt_idx >= 0)
+	    options[opt_idx].def_val[VI_DEFAULT] = (char_u *)TRUE;
+    }
 #endif
 
 #ifdef FEAT_SEARCHPATH
@@ -3057,8 +3066,11 @@ set_init_1()
 		}
 		buf[j] = NUL;
 		opt_idx = findoption((char_u *)"cdpath");
-		options[opt_idx].def_val[VI_DEFAULT] = buf;
-		options[opt_idx].flags |= P_DEF_ALLOCED;
+		if (opt_idx >= 0)
+		{
+		    options[opt_idx].def_val[VI_DEFAULT] = buf;
+		    options[opt_idx].flags |= P_DEF_ALLOCED;
+		}
 	    }
 	    if (mustfree)
 		vim_free(cdpath);
@@ -3259,8 +3271,11 @@ set_init_1()
 	if (mb_init() == NULL)
 	{
 	    opt_idx = findoption((char_u *)"encoding");
-	    options[opt_idx].def_val[VI_DEFAULT] = p_enc;
-	    options[opt_idx].flags |= P_DEF_ALLOCED;
+	    if (opt_idx >= 0)
+	    {
+		options[opt_idx].def_val[VI_DEFAULT] = p_enc;
+		options[opt_idx].flags |= P_DEF_ALLOCED;
+	    }
 
 #if defined(MSDOS) || defined(MSWIN) || defined(OS2) || defined(MACOS) \
 		|| defined(VMS)
@@ -3278,9 +3293,11 @@ set_init_1()
 		set_string_option_direct((char_u *)"isk", -1,
 					      ISK_LATIN1, OPT_FREE, SID_NONE);
 		opt_idx = findoption((char_u *)"isp");
-		options[opt_idx].def_val[VIM_DEFAULT] = ISP_LATIN1;
+		if (opt_idx >= 0)
+		    options[opt_idx].def_val[VIM_DEFAULT] = ISP_LATIN1;
 		opt_idx = findoption((char_u *)"isk");
-		options[opt_idx].def_val[VIM_DEFAULT] = ISK_LATIN1;
+		if (opt_idx >= 0)
+		    options[opt_idx].def_val[VIM_DEFAULT] = ISK_LATIN1;
 		(void)init_chartab();
 	    }
 #endif
@@ -3297,8 +3314,11 @@ set_init_1()
 		if (p_tenc != NULL)
 		{
 		    opt_idx = findoption((char_u *)"termencoding");
-		    options[opt_idx].def_val[VI_DEFAULT] = p_tenc;
-		    options[opt_idx].flags |= P_DEF_ALLOCED;
+		    if (opt_idx >= 0)
+		    {
+			options[opt_idx].def_val[VI_DEFAULT] = p_tenc;
+			options[opt_idx].flags |= P_DEF_ALLOCED;
+		    }
 		    convert_setup(&input_conv, p_tenc, p_enc);
 		    convert_setup(&output_conv, p_enc, p_tenc);
 		}
@@ -3436,10 +3456,13 @@ set_string_default(name, val)
     if (p != NULL)		/* we don't want a NULL */
     {
 	opt_idx = findoption((char_u *)name);
-	if (options[opt_idx].flags & P_DEF_ALLOCED)
-	    vim_free(options[opt_idx].def_val[VI_DEFAULT]);
-	options[opt_idx].def_val[VI_DEFAULT] = p;
-	options[opt_idx].flags |= P_DEF_ALLOCED;
+	if (opt_idx >= 0)
+	{
+	    if (options[opt_idx].flags & P_DEF_ALLOCED)
+		vim_free(options[opt_idx].def_val[VI_DEFAULT]);
+	    options[opt_idx].def_val[VI_DEFAULT] = p;
+	    options[opt_idx].flags |= P_DEF_ALLOCED;
+	}
     }
 }
 
@@ -3452,7 +3475,11 @@ set_number_default(name, val)
     char	*name;
     long	val;
 {
-    options[findoption((char_u *)name)].def_val[VI_DEFAULT] = (char_u *)val;
+    int		opt_idx;
+
+    opt_idx = findoption((char_u *)name);
+    if (opt_idx >= 0)
+	options[opt_idx].def_val[VI_DEFAULT] = (char_u *)val;
 }
 
 #if defined(EXITFREE) || defined(PROTO)
@@ -3498,7 +3525,7 @@ set_init_2()
      */
     set_number_default("scroll", (long)((long_u)Rows >> 1));
     idx = findoption((char_u *)"scroll");
-    if (!(options[idx].flags & P_WAS_SET))
+    if (idx >= 0 && !(options[idx].flags & P_WAS_SET))
 	set_option_default(idx, OPT_LOCAL, p_cp);
     comp_col();
 
@@ -3507,7 +3534,7 @@ set_init_2()
      * Default is Rows - 1.
      */
     idx = findoption((char_u *)"wi");
-    if (!(options[idx].flags & P_WAS_SET))
+    if (idx >= 0 && !(options[idx].flags & P_WAS_SET))
 	p_window = Rows - 1;
     set_number_default("window", Rows - 1);
 
@@ -3519,7 +3546,8 @@ set_init_2()
      * with a dark background, that can handle color.
      */
     idx = findoption((char_u *)"bg");
-    if (!(options[idx].flags & P_WAS_SET) && *term_bg_default() == 'd')
+    if (idx >= 0 && !(options[idx].flags & P_WAS_SET)
+						 && *term_bg_default() == 'd')
     {
 	set_string_option_direct(NULL, idx, (char_u *)"dark", OPT_FREE, 0);
 	/* don't mark it as set, when starting the GUI it may be
@@ -3594,10 +3622,16 @@ set_init_3()
 #endif
 
     idx_srr = findoption((char_u *)"srr");
-    do_srr = !(options[idx_srr].flags & P_WAS_SET);
+    if (idx_srr < 0)
+	do_srr = FALSE;
+    else
+	do_srr = !(options[idx_srr].flags & P_WAS_SET);
 #ifdef FEAT_QUICKFIX
     idx_sp = findoption((char_u *)"sp");
-    do_sp = !(options[idx_sp].flags & P_WAS_SET);
+    if (idx_sp < 0)
+	do_sp = FALSE;
+    else
+	do_sp = !(options[idx_sp].flags & P_WAS_SET);
 #endif
 
     /*
@@ -3692,7 +3726,7 @@ set_init_3()
 	int	idx3;
 
 	idx3 = findoption((char_u *)"shcf");
-	if (!(options[idx3].flags & P_WAS_SET))
+	if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
 	{
 	    p_shcf = (char_u *)"-c";
 	    options[idx3].def_val[VI_DEFAULT] = p_shcf;
@@ -3702,14 +3736,14 @@ set_init_3()
 #  ifdef WIN3264
 	/* Somehow Win32 requires the quotes around the redirection too */
 	idx3 = findoption((char_u *)"sxq");
-	if (!(options[idx3].flags & P_WAS_SET))
+	if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
 	{
 	    p_sxq = (char_u *)"\"";
 	    options[idx3].def_val[VI_DEFAULT] = p_sxq;
 	}
 #  else
 	idx3 = findoption((char_u *)"shq");
-	if (!(options[idx3].flags & P_WAS_SET))
+	if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
 	{
 	    p_shq = (char_u *)"\"";
 	    options[idx3].def_val[VI_DEFAULT] = p_shq;
@@ -3738,7 +3772,7 @@ set_helplang_default(lang)
     if (lang == NULL || STRLEN(lang) < 2)	/* safety check */
 	return;
     idx = findoption((char_u *)"hlg");
-    if (!(options[idx].flags & P_WAS_SET))
+    if (idx >= 0 && !(options[idx].flags & P_WAS_SET))
     {
 	if (options[idx].flags & P_ALLOCED)
 	    free_string_option(p_hlg);
@@ -3807,7 +3841,7 @@ set_title_defaults()
      * not need to be contacted.
      */
     idx1 = findoption((char_u *)"title");
-    if (!(options[idx1].flags & P_WAS_SET))
+    if (idx1 >= 0 && !(options[idx1].flags & P_WAS_SET))
     {
 #ifdef FEAT_GUI
 	if (gui.starting || gui.in_use)
@@ -3819,7 +3853,7 @@ set_title_defaults()
 	p_title = val;
     }
     idx1 = findoption((char_u *)"icon");
-    if (!(options[idx1].flags & P_WAS_SET))
+    if (idx1 >= 0 && !(options[idx1].flags & P_WAS_SET))
     {
 #ifdef FEAT_GUI
 	if (gui.starting || gui.in_use)
@@ -5224,7 +5258,7 @@ set_string_option_direct(name, opt_idx, 
     if (opt_idx == -1)		/* use name */
     {
 	opt_idx = findoption(name);
-	if (opt_idx == -1)	/* not found (should not happen) */
+	if (opt_idx < 0)	/* not found (should not happen) */
 	{
 	    EMSG2(_(e_intern2), "set_string_option_direct()");
 	    return;
@@ -8127,7 +8161,7 @@ set_option_value(name, number, string, o
     long_u	flags;
 
     opt_idx = findoption(name);
-    if (opt_idx == -1)
+    if (opt_idx < 0)
 	EMSG2(_("E355: Unknown option: %s"), name);
     else
     {
@@ -9464,7 +9498,8 @@ reset_modifiable()
     curbuf->b_p_ma = FALSE;
     p_ma = FALSE;
     opt_idx = findoption((char_u *)"ma");
-    options[opt_idx].def_val[VI_DEFAULT] = FALSE;
+    if (opt_idx >= 0)
+	options[opt_idx].def_val[VI_DEFAULT] = FALSE;
 }
 
 /*
@@ -10297,12 +10332,16 @@ vimrc_found(fname, envname)
 change_compatible(on)
     int	    on;
 {
+    int	    opt_idx;
+
     if (p_cp != on)
     {
 	p_cp = on;
 	compatible_set();
     }
-    options[findoption((char_u *)"cp")].flags |= P_WAS_SET;
+    opt_idx = findoption((char_u *)"cp");
+    if (opt_idx >= 0)
+	options[opt_idx].flags |= P_WAS_SET;
 }
 
 /*
--- a/src/po/de.po
+++ b/src/po/de.po
@@ -4999,8 +4999,8 @@ msgid "E397: Filename required"
 msgstr "E397: Dateiname wird benötigt"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Fehlende ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Fehlende ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
--- a/src/po/fr.po
+++ b/src/po/fr.po
@@ -71,8 +71,15 @@
 # 			  - Hundreds of error messages numbers added (wow)
 # 2006-04-15    DB      Vim 7.0 first draft, based on fr.po 7.0c03
 #                         - 285 new messages.
+# 2006-05-17    DB      VIM 7.0 second draft, still 7.0c03
+#                         - (check.vim) Fixed 2 wrong translated messages.
+# 2006-05-19    DB      VIM 7.0 second draft, 7.0e02
+#                         - 15 new messages.
+# 2006-05-19    DB      VIM 7.0, based on 7.0e03
+#                         - (check.vim) Fixed wrong messages.
+#                         - header comment of this file should be updated.
 #
-# Translated:	 1677/1677 (100.00%)
+# Translated:	 1692/1692 (100.00%)
 #
 # Polishing done on:
 #  buffer.c
@@ -94,7 +101,7 @@ msgstr ""
 "Project-Id-Version: Vim(Français)\n"
 "Report-Msgid-Bugs-To: Adrien Beau <version.francaise@free.fr>\n"
 "POT-Creation-Date: 2006-04-01 17:09+0200\n"
-"PO-Revision-Date: 2006-04-15 22:53+0200\n"
+"PO-Revision-Date: 2006-04-21 00:31+0200\n"
 "Last-Translator: David Blanchet <david.blanchet@free.fr>\n"
 "Language-Team: Adrien Beau <version.francaise@free.fr>\n"
 "MIME-Version: 1.0\n"
@@ -110,7 +117,7 @@ msgstr "E82: Aucun tampon ne peut être alloué, Vim doit s'arrêter"
 #      explicite.
 msgid "E83: Cannot allocate buffer, using other one..."
 msgstr ""
-"E83: L'allocation du tampon a échoué: arrêtez Vim, libérez de la mémoire"
+"E83: L'allocation du tampon a échoué : arrêtez Vim, libérez de la mémoire"
 
 msgid "E515: No buffers were unloaded"
 msgstr "E515: Aucun tampon n'a été déchargé"
@@ -327,6 +334,9 @@ msgstr "E102: Le tampon %s est introuvab
 msgid "E103: Buffer \"%s\" is not in diff mode"
 msgstr "E103: Le tampon %s n'est pas en mode diff"
 
+msgid "E787: Buffer changed unexpectedly"
+msgstr "E787: Le tampon a été modifié inopinément"
+
 # AB - Je cherche une traduction plus concise pour "escape".
 msgid "E104: Escape not allowed in digraph"
 msgstr "E104: Un digraphe ne peut contenir le caractère d'échappement"
@@ -346,8 +356,8 @@ msgstr " Complètement de mot-clé (^N^P)"
 
 # DB - todo : Faut-il une majuscule à "mode" ?
 #. ctrl_x_mode == 0, ^P/^N compl.
-msgid " ^X mode (^]^D^E^F^I^K^L^N^O^P^S^U^V^Y)"
-msgstr " mode ^X (^]^D^E^F^I^K^L^N^O^P^S^U^V^Y)"
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr " mode ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
 
 msgid " Whole line completion (^L^N^P)"
 msgstr " Complètement de ligne entière (^L^N^P)"
@@ -388,8 +398,8 @@ msgstr " Complètement défini par l'utilisateur (^U^N^P)"
 msgid " Omni completion (^O^N^P)"
 msgstr " Complètement selon le type de fichier (Omni) (^O^N^P)"
 
-msgid " Spelling suggestion (^S^N^P)"
-msgstr " Suggestion d'orthographe (^S^N^P)"
+msgid " Spelling suggestion (s^N^P)"
+msgstr " Suggestion d'orthographe (s^N^P)"
 
 msgid " Keyword Local completion (^N^P)"
 msgstr " Complètement local de mot-clé (^N/^P)"
@@ -656,6 +666,22 @@ msgstr "E723: Il manque '}' à la fin du Dictionnaire %s"
 msgid "E724: variable nested too deep for displaying"
 msgstr "E724: variable trop imbriquée pour être afficher"
 
+#, c-format
+msgid "E117: Unknown function: %s"
+msgstr "E117: Fonction inconnue : %s"
+
+#, c-format
+msgid "E119: Not enough arguments for function: %s"
+msgstr "E119: La fonction %s n'a pas reçu assez d'arguments"
+
+#, c-format
+msgid "E120: Using <SID> not in a script context: %s"
+msgstr "E120: <SID> utilisé en dehors d'un script : %s"
+
+#, c-format
+msgid "E725: Calling dict function without Dictionary: %s"
+msgstr "E725: Appel d'une fonction « dict » sans Dictionnaire : %s"
+
 msgid "E699: Too many arguments"
 msgstr "E699: Trop d'arguments"
 
@@ -696,8 +722,8 @@ msgstr ""
 msgid "called inputrestore() more often than inputsave()"
 msgstr "inputrestore() a été appelé plus de fois qu'inputsave()"
 
-msgid "E745: Range not allowed"
-msgstr "E745: Les plages ne sont pas autorisés"
+msgid "E786: Range not allowed"
+msgstr "E786: Les plages ne sont pas autorisés"
 
 msgid "E701: Invalid type for len()"
 msgstr "E701: Type invalide avec len()"
@@ -1200,7 +1226,8 @@ msgstr "E145: Les commandes externes son
 
 msgid "E146: Regular expressions can't be delimited by letters"
 msgstr ""
-"E146: Les expressions régulières ne peuvent pas être délimitées par des lettres"
+"E146: Les expressions régulières ne peuvent pas être délimitées par des "
+"lettres"
 
 #, c-format
 msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
@@ -1266,7 +1293,6 @@ msgstr ""
 msgid "E478: Don't panic!"
 msgstr "E478: Pas de panique !"
 
-# DB - c-format : langue de l'aide puis sujet de l'aide.
 #, c-format
 msgid "E661: Sorry, no '%s' help for %s"
 msgstr "E661: Désolé, aucune aide en langue '%s' pour %s"
@@ -1304,7 +1330,7 @@ msgstr "E670: Encodages différents dans les fichiers d'aide en langue %s"
 # DB - Suggestion.
 #, c-format
 msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: Marqueur \"%s\" dupliqué fichier %s/%s"
+msgstr "E154: Marqueur \"%s\" dupliqué dans le fichier %s/%s"
 
 # AB - Il faut respecter l'esprit plus que la lettre.
 #, c-format
@@ -1375,9 +1401,8 @@ msgstr "Fin de la fonction"
 msgid "E464: Ambiguous use of user-defined command"
 msgstr "E464: Utilisation ambigüe d'une commande définie par l'utilisateur"
 
-# DB - Espace final car Vim peut ajouter ": <informations>" à la suite
 msgid "E492: Not an editor command"
-msgstr "E492: Commande inconnue "
+msgstr "E492: Commande inconnue"
 
 msgid "E493: Backwards range given"
 msgstr "E493: La plage spécifiée est inversée"
@@ -1444,8 +1469,7 @@ msgid "E182: Invalid command name"
 msgstr "E182: Nom de commande invalide"
 
 msgid "E183: User defined commands must start with an uppercase letter"
-msgstr ""
-"E183: Les commandes utilisateur doivent commencer par une majuscule"
+msgstr "E183: Les commandes utilisateur doivent commencer par une majuscule"
 
 #, c-format
 msgid "E184: No such user-defined command: %s"
@@ -1487,11 +1511,10 @@ msgstr "Pas de fichier d'échange"
 msgid "Append File"
 msgstr "Ajouter fichier"
 
-# DB - todo : le messages d'aide (":h E747") n'a rien à voir...
 msgid "E747: Cannot change directory, buffer is modifed (add ! to override)"
 msgstr ""
-"E747: Tampon modifié : impossible de changer de répertoire (ajoutez ! "
-"pour passer outre)"
+"E747: Tampon modifié : impossible de changer de répertoire (ajoutez ! pour "
+"passer outre)"
 
 msgid "E186: No previous directory"
 msgstr "E186: Pas de répertoire précédent"
@@ -1555,8 +1578,7 @@ msgid "E496: no autocommand buffer numbe
 msgstr "E496: Aucun numéro de tampon d'autocommande à substituer à \"<abuf>\""
 
 msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr ""
-"E497: Aucune correspondance d'autocommande à substituer à \"<amatch>\""
+msgstr "E497: Aucune correspondance d'autocommande à substituer à \"<amatch>\""
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: Aucun nom de fichier :source à substituer à \"<sfile>\""
@@ -1664,12 +1686,15 @@ msgstr "E601: Imbrication de :try trop i
 msgid "E603: :catch without :try"
 msgstr "E603: :catch sans :try"
 
+#. Give up for a ":catch" after ":finally" and ignore it.
+#. * Just parse.
 msgid "E604: :catch after :finally"
 msgstr "E604: :catch après :finally"
 
 msgid "E606: :finally without :try"
 msgstr "E606: :finally sans :try"
 
+#. Give up for a multiple ":finally" and ignore it.
 msgid "E607: multiple :finally"
 msgstr "E607: Il ne peut y avoir qu'un seul :finally"
 
@@ -1679,6 +1704,9 @@ msgstr "E602: :endtry sans :try"
 msgid "E193: :endfunction not inside a function"
 msgstr "E193: :endfunction en dehors d'une fonction"
 
+msgid "E788: Not allowed to edit another buffer now"
+msgstr "E788: L'édition d'un autre tampon n'est plus permise"
+
 # DB - TODO : Pas compris le message ni comment le déclencher malgré une visite
 #      dans le code.
 msgid "tagname"
@@ -1754,6 +1782,7 @@ msgstr "Vim: Lecture de stdin...\n"
 msgid "Reading from stdin..."
 msgstr "Lecture de stdin..."
 
+#. Re-opening the original file failed!
 msgid "E202: Conversion made file unreadable!"
 msgstr "E202: La conversion a rendu le fichier illisible !"
 
@@ -1831,17 +1860,15 @@ msgid "is read-only (add ! to override)"
 msgstr "est en lecture seule (ajoutez ! pour passer outre)"
 
 msgid "E506: Can't write to backup file (add ! to override)"
-msgstr ""
-"E506: Impossible d'écrire la copie de secours (! pour passer outre)"
+msgstr "E506: Impossible d'écrire la copie de secours (! pour passer outre)"
 
 msgid "E507: Close error for backup file (add ! to override)"
-msgstr ""
-"E507: Erreur de fermeture de la copie de secours (! pour passer outre)"
+msgstr "E507: Erreur de fermeture de la copie de secours (! pour passer outre)"
 
 msgid "E508: Can't read file for backup (add ! to override)"
 msgstr ""
-"E508: Impossible de lire le fichier pour la copie de secours (ajoutez ! "
-"pour passer outre)"
+"E508: Impossible de lire le fichier pour la copie de secours (ajoutez ! pour "
+"passer outre)"
 
 msgid "E509: Cannot create backup file (add ! to override)"
 msgstr ""
@@ -1963,6 +1990,9 @@ msgstr "[noeol]"
 msgid "[Incomplete last line]"
 msgstr "[Dernière ligne incomplète]"
 
+#. don't overwrite messages here
+#. must give this prompt
+#. don't use emsg() here, don't want to flush the buffers
 msgid "WARNING: The file has been changed since reading it!!!"
 msgstr "ALERTE: Le fichier a été modifié depuis que Vim l'a lu !"
 
@@ -2044,6 +2074,7 @@ msgstr "--Effacé--"
 msgid "auto-removing autocommand: %s <buffer=%d>"
 msgstr "Autocommandes marquées pour auto-suppression : %s <tampon=%d>"
 
+#. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
 msgstr "E367: Aucun groupe \"%s\""
@@ -2356,11 +2387,11 @@ msgstr "Chercher une chaîne (utilisez '\\\\' pour chercher un '\\')"
 msgid "Find & Replace (use '\\\\' to find  a '\\')"
 msgstr "Chercher et remplacer (utilisez '\\\\' pour trouver un '\\')"
 
-#. We fake this: Use a filter that doesn't select anything and a default
-#. * file name that won't be used.
 # DB - Traduction non indispensable puisque le code indique qu'il s'agit d'un
 #      paramétrage bidon afin de sélectionner un répertoire plutôt qu'un
 #      fichier.
+#. We fake this: Use a filter that doesn't select anything and a default
+#. * file name that won't be used.
 msgid "Not Used"
 msgstr "Non utilisé"
 
@@ -2434,6 +2465,7 @@ msgstr "Choisir une police - Vim"
 msgid "Name:"
 msgstr "Nom :"
 
+#. create toggle button
 msgid "Show size in Points"
 msgstr "Afficher la taille en Points"
 
@@ -2516,8 +2548,7 @@ msgstr ""
 "E674: 'printmbcharset' ne peut pas être vide avec un encodage multi-octets"
 
 msgid "E675: No default font specified for multi-byte printing."
-msgstr ""
-"E675: Aucune police par défaut pour l'impression multi-octets"
+msgstr "E675: Aucune police par défaut pour l'impression multi-octets"
 
 msgid "E324: Can't open PostScript output file"
 msgstr "E324: Impossible d'ouvrir le fichier PostScript de sortie"
@@ -2627,8 +2658,7 @@ msgstr "E567: Aucune connexion cscope"
 # DB - todo
 #, c-format
 msgid "E259: no matches found for cscope query %s of %s"
-msgstr ""
-"E259: aucune correspondance trouvée pour la requête cscope %s de %s"
+msgstr "E259: aucune correspondance trouvée pour la requête cscope %s de %s"
 
 #, c-format
 msgid "E469: invalid cscopequickfix flag %c for %c"
@@ -2663,6 +2693,7 @@ msgstr "E261: Connexion cscope %s introu
 msgid "cscope connection %s closed"
 msgstr "connexion cscope %s fermée"
 
+#. should not reach here
 msgid "E570: fatal error in cs_manage_matches"
 msgstr "E570: erreur fatale dans cs_manage_matches"
 
@@ -2817,12 +2848,33 @@ msgstr "<fenêtre %d>"
 msgid "no such window"
 msgstr "Cette fenêtre n'existe pas"
 
+msgid "E265: $_ must be an instance of String"
+msgstr "E265: $_ doit être une instance de chaîne (String)"
+
 msgid ""
 "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
 msgstr ""
 "E266: Désolé, commande désactivée : la bibliothèque Ruby n'a pas pu être "
 "chargée."
 
+msgid "E267: unexpected return"
+msgstr "E267: « return » inattendu"
+
+msgid "E268: unexpected next"
+msgstr "E268: « next » inattendu"
+
+msgid "E269: unexpected break"
+msgstr "E269: « break » inattendu"
+
+msgid "E270: unexpected redo"
+msgstr "E270: « redo » inattendu"
+
+msgid "E271: retry outside of rescue clause"
+msgstr "E271: « retry » hors d'une clause « rescue »"
+
+msgid "E272: unhandled exception"
+msgstr "E272: Exception non prise en charge"
+
 # DB - todo
 #, c-format
 msgid "E273: unknown longjmp status %d"
@@ -3047,6 +3099,7 @@ msgstr "Vim: Alerte: La sortie ne s'effe
 msgid "Vim: Warning: Input is not from a terminal\n"
 msgstr "Vim: Alerte: L'entrée ne se fait pas sur un terminal\n"
 
+#. just in case..
 msgid "pre-vimrc command line"
 msgstr "ligne de commande pre-vimrc"
 
@@ -3095,7 +3148,8 @@ msgstr ""
 # DB - todo (VMS uniquement).
 msgid "where case is ignored prepend / to make flag upper case"
 msgstr ""
-"pour lesquels la casse est indifférente (/ pour que le drapeau soit majuscule)"
+"pour lesquels la casse est indifférente (/ pour que le drapeau soit "
+"majuscule)"
 
 msgid ""
 "\n"
@@ -3123,7 +3177,8 @@ msgstr "-g\t\tLancer l'interface graphiq
 
 msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
 msgstr ""
-"-f, --nofork\tPremier-plan : ne pas détacher l'interface graphique du terminal"
+"-f, --nofork\tPremier-plan : ne pas détacher l'interface graphique du "
+"terminal"
 
 msgid "-v\t\t\tVi mode (like \"vi\")"
 msgstr "-v\t\tMode Vi (comme \"vi\")"
@@ -3278,7 +3333,8 @@ msgstr "--remote-send <tche>\tEnvoyer <touches> à un serveur Vim puis quitter"
 
 msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
 msgstr ""
-"--remote-expr <expr>\tÉvaluer <expr> dans un serveur Vim, afficher le résultat"
+"--remote-expr <expr>\tÉvaluer <expr> dans un serveur Vim, afficher le "
+"résultat"
 
 msgid "--serverlist\t\tList available Vim server names and exit"
 msgstr ""
@@ -3312,7 +3368,7 @@ msgstr ""
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (Athena version) :\n"
+"Arguments recognised by gvim (Athena version):\n"
 msgstr ""
 "\n"
 "Arguments reconnus par gvim (version Athena) :\n"
@@ -3394,8 +3450,7 @@ msgstr ""
 "-display <display>\tLancer Vim sur ce <display>\t(également : --display)"
 
 msgid "--role <role>\tSet a unique role to identify the main window"
-msgstr ""
-"--role <rôle>\tDonner un rôle pour identifier la fenêtre principale"
+msgstr "--role <rôle>\tDonner un rôle pour identifier la fenêtre principale"
 
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tOuvrir Vim dans un autre widget GTK"
@@ -3504,7 +3559,8 @@ msgstr "E288: la méthode de saisie ne supporte aucun style"
 
 msgid "E289: input method doesn't support my preedit type"
 msgstr ""
-"E289: le type de préédition de Vim n'est pas supporté par la méthode de saisie"
+"E289: le type de préédition de Vim n'est pas supporté par la méthode de "
+"saisie"
 
 # DB - todo
 msgid "E290: over-the-spot style requires fontset"
@@ -3576,8 +3632,8 @@ msgid ""
 "Maybe no changes were made or Vim did not update the swap file."
 msgstr ""
 "\n"
-"Il est possible qu'aucune modif. n'a été faite ou que Vim n'a pas mis à jour "
-" le fichier d'échange."
+"Il est possible qu'aucune modif. n'a été faite ou que Vim n'a pas mis à "
+"jour  le fichier d'échange."
 
 msgid " cannot be used with this version of Vim.\n"
 msgstr " ne peut pas être utilisé avec cette version de Vim.\n"
@@ -3651,7 +3707,8 @@ msgstr "E311: Récupération interrompue"
 msgid ""
 "E312: Errors detected while recovering; look for lines starting with ???"
 msgstr ""
-"E312: Erreurs lors de la récupération ; examinez les lignes commençant par ???"
+"E312: Erreurs lors de la récupération ; examinez les lignes commençant "
+"par ???"
 
 msgid "See \":help E312\" for more information."
 msgstr "Consultez \":help E312\" pour plus d'information."
@@ -3954,6 +4011,8 @@ msgstr "E331: Ajout d'éléments de menu directement dans barre de menu interdit"
 msgid "E332: Separator cannot be part of a menu path"
 msgstr "E332: Un séparateur ne peut faire partie d'un chemin de menu"
 
+#. Now we have found the matching menu, and we list the mappings
+#. Highlight title
 msgid ""
 "\n"
 "--- Menus ---"
@@ -4048,6 +4107,7 @@ msgstr "Enregistrer un fichier"
 msgid "Open File dialog"
 msgstr "Ouvrir un fichier"
 
+#. TODO: non-GUI file selector here
 msgid "E338: Sorry, no file browser in console mode"
 msgstr "E338: Désolé, pas de sélecteur de fichiers en mode console"
 
@@ -4089,6 +4149,7 @@ msgstr "Bip !"
 msgid "Vim: preserving files...\n"
 msgstr "Vim: préservation des fichiers...\n"
 
+#. close all memfiles, without deleting
 msgid "Vim: Finished.\n"
 msgstr "Vim: Fini.\n"
 
@@ -4175,6 +4236,7 @@ msgstr "E346: Plus de répertoire \"%s\" dans 'cdpath'"
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: Plus de fichier \"%s\" dans 'path'"
 
+#. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
 msgstr "Impossible de se connecter à Netbeans n°2"
 
@@ -4184,7 +4246,8 @@ msgstr "Impossible de se connecter à Netbeans"
 #, c-format
 msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
 msgstr ""
-"E668: Mode d'accès incorrect au fichier d'infos de connexion NetBeans : \"%s\""
+"E668: Mode d'accès incorrect au fichier d'infos de connexion NetBeans : \"%s"
+"\""
 
 # DB : message d'un appel à perror().
 msgid "read from Netbeans socket"
@@ -4259,6 +4322,7 @@ msgid "E748: No previously used register
 msgstr "E748: Aucun registre n'a été précédemment utilisé"
 
 # DB - Question O/N.
+#. must display the prompt
 msgid "cannot yank; delete anyway"
 msgstr "impossible de réaliser une copie ; effacer tout de même"
 
@@ -4291,6 +4355,7 @@ msgstr "%ld lignes copiées"
 msgid "E353: Nothing in register %s"
 msgstr "E353: Le registre %s est vide"
 
+#. Highlight title
 msgid ""
 "\n"
 "--- Registers ---"
@@ -4327,8 +4392,8 @@ msgid ""
 "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
 "Bytes"
 msgstr ""
-"%s%ld sur %ld Lignes ; %ld sur %ld Mots ; %ld sur %ld Caractères ; "
-"%ld sur %ld octets sélectionnés"
+"%s%ld sur %ld Lignes ; %ld sur %ld Mots ; %ld sur %ld Caractères ; %ld sur "
+"%ld octets sélectionnés"
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
@@ -4339,8 +4404,9 @@ msgstr ""
 msgid ""
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
-msgstr "Colonne %s sur %s ; Ligne %ld sur %ld ; Mot %ld sur %ld ; "
-"Caractère %ld sur %ld ; Octet %ld sur %ld"
+msgstr ""
+"Colonne %s sur %s ; Ligne %ld sur %ld ; Mot %ld sur %ld ; Caractère %ld sur "
+"%ld ; Octet %ld sur %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4352,9 +4418,8 @@ msgstr "%<%f%h%m%=Page %N"
 msgid "Thanks for flying Vim"
 msgstr "Merci d'avoir choisi Vim"
 
-# DB - Espace final car Vim peut ajouter ": <informations>" à la suite
 msgid "E518: Unknown option"
-msgstr "E518: Option inconnue "
+msgstr "E518: Option inconnue"
 
 msgid "E519: Option not supported"
 msgstr "E519: Option non supportée"
@@ -4376,8 +4441,7 @@ msgid "E529: Cannot set 'term' to empty 
 msgstr "E529: 'term' ne doit pas être une chaîne vide"
 
 msgid "E530: Cannot change term in GUI"
-msgstr ""
-"E530: Impossible de modifier term dans l'interface graphique"
+msgstr "E530: Impossible de modifier term dans l'interface graphique"
 
 msgid "E531: Use \":gui\" to start the GUI"
 msgstr "E531: Utilisez \":gui\" pour démarrer l'interface graphique"
@@ -4553,15 +4617,11 @@ msgstr "ANCHOR_BUF_SIZE trop petit."
 msgid "I/O ERROR"
 msgstr "ERREUR d'E/S"
 
-msgid "...(truncated)"
-msgstr "...(tronqué)"
-
 msgid "Message"
 msgstr "Message"
 
 msgid "'columns' is not 80, cannot execute external commands"
-msgstr ""
-"'columns' ne vaut pas 80, impossible d'exécuter des commandes externes"
+msgstr "'columns' ne vaut pas 80, impossible d'exécuter des commandes externes"
 
 msgid "E237: Printer selection failed"
 msgstr "E237: La sélection de l'imprimante a échoué"
@@ -5000,6 +5060,16 @@ msgstr "E388: Impossible de trouver la définition"
 msgid "E389: Couldn't find pattern"
 msgstr "E389: Impossible de trouver le motif"
 
+#, c-format
+msgid ""
+"\n"
+"# Last %sSearch Pattern:\n"
+"~"
+msgstr ""
+"\n"
+"# Dernier motif de recherche %s :\n"
+"~"
+
 msgid "E759: Format error in spell file"
 msgstr "E759: Erreur de format du fichier orthographique"
 
@@ -5064,7 +5134,7 @@ msgstr "La conversion dans %s non supportée : de %s vers %s"
 
 #, c-format
 msgid "Conversion in %s not supported"
-msgstr "La conversion dans %s non supportée" 
+msgstr "La conversion dans %s non supportée"
 
 #, c-format
 msgid "Invalid value for FLAG in %s line %d: %s"
@@ -5075,6 +5145,22 @@ msgid "FLAG after using flags in %s line
 msgstr "FLAG trouvé après des drapeaux dans %s ligne %d : %s"
 
 #, c-format
+msgid ""
+"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Définir COMPOUNDFORBIDFLAG après des PFX peut donner des résultats erronés "
+"dans %s ligne %d"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Définir COMPOUNDPERMITFLAG après des PFX peut donner des résultats erronés "
+" dans %s ligne %d"
+
+#, c-format
 msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
 msgstr "Valeur de COMPOUNDWORDMAX erronée dans %s ligne %d : %s"
 
@@ -5106,8 +5192,8 @@ msgid ""
 "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
 "line %d: %s"
 msgstr ""
-"Affixe aussi utilisée pour BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST "
-"dans %s ligne %d : %s"
+"Affixe aussi utilisée pour BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
+"NOSUGGEST dans %s ligne %d : %s"
 
 #, c-format
 msgid "Expected Y or N in %s line %d: %s"
@@ -5118,13 +5204,6 @@ msgstr "Y ou N attendu dans %s ligne %d 
 msgid "Broken condition in %s line %d: %s"
 msgstr "Condition non valide dans %s ligne %d : %s"
 
-# DB - todo
-#, c-format
-msgid "Affix flags ignored when PFXPOSTPONE used in %s line %d: %s"
-msgstr ""
-"Drapeaux de l'affixe ignorés quand PFXPOSTPONE est utilisé dans %s ligne %d "
-": %s"
-
 #, c-format
 msgid "Expected REP(SAL) count in %s line %d"
 msgstr "Nombre de REP(SAL) attendu dans %s ligne %d"
@@ -5248,8 +5327,10 @@ msgstr "%d noeuds compressés sur %d ; %d (%d%%) restants "
 msgid "Reading back spell file..."
 msgstr "Relecture du fichier orthographique"
 
+#.
 #. * Go through the trie of good words, soundfold each word and add it to
 #. * the soundfold trie.
+#.
 msgid "Performing soundfolding..."
 msgstr "Analyse phonétique en cours..."
 
@@ -5313,6 +5394,7 @@ msgstr "Désolé, aucune suggestion"
 msgid "Sorry, only %ld suggestions"
 msgstr "Désolé, seulement %ld suggestions"
 
+#. avoid more prompt
 #, c-format
 msgid "Change \"%.*s\" to:"
 msgstr "Remplacer \"%.*s\" par :"
@@ -5594,6 +5676,7 @@ msgstr "  Utilisation d'un marqueur avec une casse différente !"
 msgid "E429: File \"%s\" does not exist"
 msgstr "E429: Le fichier \"%s\" n'existe pas"
 
+#. Highlight title
 msgid ""
 "\n"
 "  # TO tag         FROM line  in file/text"
@@ -5654,6 +5737,7 @@ msgstr "E436: Aucune entrée \"%s\" dans termcap"
 msgid "E437: terminal capability \"cm\" required"
 msgstr "E437: capacité de terminal \"cm\" requise"
 
+#. Highlight title
 msgid ""
 "\n"
 "--- Terminal keys ---"
@@ -5668,6 +5752,7 @@ msgid "Vim: Error reading input, exiting
 msgstr "Vim: Erreur lors de la lecture de l'entrée, sortie...\n"
 
 # DB - Question O/N.
+#. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr "Annulation impossible ; continuer"
 
@@ -5719,6 +5804,10 @@ msgstr "Rien à annuler"
 msgid "number changes  time"
 msgstr "numéro  modif.  instant"
 
+#, c-format
+msgid "%ld seconds ago"
+msgstr "il y a %ld secondes"
+
 msgid "E439: undo list corrupt"
 msgstr "E439: la liste d'annulation est corrompue"
 
@@ -6031,6 +6120,9 @@ msgstr "ALERTE: Windows 95/98/ME détecté"
 msgid "type  :help windows95<Enter>  for info on this"
 msgstr "tapez  :help windows95<Entrée>  pour plus d'information"
 
+msgid "Already only one window"
+msgstr "Il n'y a déjà plus qu'une fenêtre"
+
 msgid "E441: There is no preview window"
 msgstr "E441: Il n'y a pas de fenêtre de prévisualisation"
 
@@ -6043,9 +6135,6 @@ msgstr "E443: Rotation impossible quand une autre fenêtre est partagée"
 msgid "E444: Cannot close last window"
 msgstr "E444: Impossible de fermer la dernière fenêtre"
 
-msgid "Already only one window"
-msgstr "Il n'y a déjà plus qu'une fenêtre"
-
 msgid "E445: Other window contains changes"
 msgstr "E445: Les modifications de l'autre fenêtre n'ont pas été enregistrées"
 
@@ -6079,6 +6168,7 @@ msgstr "&Comparer avec Vim"
 msgid "Edit with &Vim"
 msgstr "Éditer dans &Vim"
 
+#. Now concatenate
 msgid "Edit with existing Vim - "
 msgstr "Éditer dans le Vim existant - "
 
@@ -6088,8 +6178,8 @@ msgstr "Édites le(s) fichier(s) sélectionné(s) avec Vim"
 # DB - MessageBox win32, la longueur n'est pas un problème !
 msgid "Error creating process: Check if gvim is in your path!"
 msgstr ""
-"Erreur de création du processus : "
-"vérifiez que gvim est bien dans votre chemin !"
+"Erreur de création du processus : vérifiez que gvim est bien dans votre "
+"chemin !"
 
 msgid "gvimext.dll error"
 msgstr "Erreur de gvimext.dll"
@@ -6102,6 +6192,10 @@ msgstr "Le chemin est trop long !"
 msgid "--No lines in buffer--"
 msgstr "--Le tampon est vide--"
 
+#.
+#. * The error messages that can be shared are included here.
+#. * Excluded are errors that are only used once and debugging messages.
+#.
 msgid "E470: Command aborted"
 msgstr "E470: Commande annulée"
 
@@ -6338,7 +6432,8 @@ msgstr "E46: La variable \"%s\" est en l
 
 #, c-format
 msgid "E46: Cannot set variable in the sandbox: \"%s\""
-msgstr "E46: Impossible de modifier une variable depuis le bac à sable : \"%s\""
+msgstr ""
+"E46: Impossible de modifier une variable depuis le bac à sable : \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Erreur lors de la lecture du fichier d'erreurs"
@@ -6429,7 +6524,7 @@ msgstr "E682: Délimiteur ou motif de recherche invalide"
 msgid "E139: File is loaded in another buffer"
 msgstr "E139: Le fichier est chargé dans un autre tampon"
 
-#,c-format
+#, c-format
 msgid "E764: Option '%s' is not set"
 msgstr "E764: L'option '%s' n'est pas activée"
 
--- a/src/po/it.po
+++ b/src/po/it.po
@@ -5096,8 +5096,8 @@ msgid "E397: Filename required"
 msgstr "E397: Nome file necessario"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Manca ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Manca ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
--- a/src/po/ja.po
+++ b/src/po/ja.po
@@ -5109,8 +5109,8 @@ msgid "E397: Filename required"
 msgstr "E397: ¥Õ¥¡¥¤¥ë̾¤¬É¬ÍפǤ¹"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: ']' ¤¬¤¢¤ê¤Þ¤»¤ó: %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: ']' ¤¬¤¢¤ê¤Þ¤»¤ó: %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
--- a/src/po/ja.sjis.po
+++ b/src/po/ja.sjis.po
@@ -5109,8 +5109,8 @@ msgid "E397: Filename required"
 msgstr "E397: ƒtƒ@ƒCƒ‹–¼‚ª•K—v‚Å‚·"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: ']' ‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: ']' ‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
--- a/src/po/pl.UTF-8.po
+++ b/src/po/pl.UTF-8.po
@@ -5101,8 +5101,8 @@ msgid "E397: Filename required"
 msgstr "E397: Wymagana nazwa pliku"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Brak ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Brak ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
--- a/src/po/pl.cp1250.po
+++ b/src/po/pl.cp1250.po
@@ -5101,8 +5101,8 @@ msgid "E397: Filename required"
 msgstr "E397: Wymagana nazwa pliku"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Brak ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Brak ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
--- a/src/po/pl.po
+++ b/src/po/pl.po
@@ -5101,8 +5101,8 @@ msgid "E397: Filename required"
 msgstr "E397: Wymagana nazwa pliku"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Brak ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Brak ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
--- a/src/po/sk.cp1250.po
+++ b/src/po/sk.cp1250.po
@@ -4871,8 +4871,8 @@ msgid "E397: Filename required"
 msgstr "E397: Vyžadovaný názov súboru"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Chýba ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Chýba ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
--- a/src/po/sk.po
+++ b/src/po/sk.po
@@ -4871,8 +4871,8 @@ msgid "E397: Filename required"
 msgstr "E397: Vy¾adovaný názov súboru"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Chýba ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Chýba ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
--- a/src/po/sv.po
+++ b/src/po/sv.po
@@ -5066,8 +5066,8 @@ msgid "E397: Filename required"
 msgstr "E397: Filnamn krävs"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Saknar ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Saknar ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
--- a/src/po/zh_CN.UTF-8.po
+++ b/src/po/zh_CN.UTF-8.po
@@ -5056,8 +5056,8 @@ msgid "E397: Filename required"
 msgstr "E397: 需è¦æ–‡ä»¶å称"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: 缺少 ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: 缺少 ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
--- a/src/po/zh_CN.cp936.po
+++ b/src/po/zh_CN.cp936.po
@@ -5056,8 +5056,8 @@ msgid "E397: Filename required"
 msgstr "E397: ÐèÒªÎļþÃû³Æ"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: ȱÉÙ ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: ȱÉÙ ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
--- a/src/po/zh_CN.po
+++ b/src/po/zh_CN.po
@@ -5056,8 +5056,8 @@ msgid "E397: Filename required"
 msgstr "E397: ÐèÒªÎļþÃû³Æ"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: ȱÉÙ ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: ȱÉÙ ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
--- a/src/popupmnu.c
+++ b/src/popupmnu.c
@@ -30,7 +30,7 @@ static int pum_col;			/* left column of 
 
 static int pum_do_redraw = FALSE;	/* do redraw anyway */
 
-static int pum_set_selected __ARGS((int n));
+static int pum_set_selected __ARGS((int n, int repeat));
 
 #define PUM_DEF_HEIGHT 10
 #define PUM_DEF_WIDTH  15
@@ -59,6 +59,7 @@ pum_display(array, size, selected)
     int		height;
     int		col;
     int		above_row = cmdline_row;
+    int		redo_count = 0;
 
 redo:
     def_width = PUM_DEF_WIDTH;
@@ -209,8 +210,9 @@ redo:
     pum_size = size;
 
     /* Set selected item and redraw.  If the window size changed need to redo
-     * the positioning. */
-    if (pum_set_selected(selected))
+     * the positioning.  Limit this to two times, when there is not much
+     * room the window size will keep changing. */
+    if (pum_set_selected(selected, redo_count) && ++redo_count <= 2)
 	goto redo;
 }
 
@@ -338,12 +340,17 @@ pum_get_selected()
 /*
  * Set the index of the currently selected item.  The menu will scroll when
  * necessary.  When "n" is out of range don't scroll.
+ * This may be repeated when the preview window is used:
+ * "repeat" == 0: open preview window normally
+ * "repeat" == 1: open preview window but don't set the size
+ * "repeat" == 2: don't open preview window
  * Returns TRUE when the window was resized and the location of the popup menu
  * must be recomputed.
  */
     static int
-pum_set_selected(n)
+pum_set_selected(n, repeat)
     int	    n;
+    int	    repeat;
 {
     int	    resized = FALSE;
     int	    context = pum_height / 2;
@@ -404,10 +411,14 @@ pum_set_selected(n)
 	/*
 	 * Show extra info in the preview window if there is something and
 	 * 'completeopt' contains "preview".
+	 * Skip this when tried twice already.
+	 * Skip this also when there is not much room.
 	 * NOTE: Be very careful not to sync undo!
 	 */
 	if (pum_array[pum_selected].pum_info != NULL
-					    && vim_strchr(p_cot, 'p') != NULL)
+		&& Rows > 10
+		&& repeat <= 1
+		&& vim_strchr(p_cot, 'p') != NULL)
 	{
 	    win_T	*curwin_save = curwin;
 	    int		res = OK;
@@ -470,12 +481,15 @@ pum_set_selected(n)
 
 		    /* Increase the height of the preview window to show the
 		     * text, but no more than 'previewheight' lines. */
-		    if (lnum > p_pvh)
-			lnum = p_pvh;
-		    if (curwin->w_height < lnum)
+		    if (repeat == 0)
 		    {
-			win_setheight((int)lnum);
-			resized = TRUE;
+			if (lnum > p_pvh)
+			    lnum = p_pvh;
+			if (curwin->w_height < lnum)
+			{
+			    win_setheight((int)lnum);
+			    resized = TRUE;
+			}
 		    }
 
 		    curbuf->b_changed = 0;
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -4528,7 +4528,7 @@ syn_cmd_keyword(eap, syncing)
 			    break;
 			if (p[1] == NUL)
 			{
-			    EMSG2(_("E747: Missing ']': %s"), kw);
+			    EMSG2(_("E789: Missing ']': %s"), kw);
 			    kw = p + 2;		/* skip over the NUL */
 			    break;
 			}
@@ -6329,9 +6329,9 @@ init_highlight(both, reset)
      * depend on the number of colors available. */
     if (t_colors > 8)
 	do_highlight((char_u *)(*p_bg == 'l' ? "Visual ctermbg=LightGrey"
-				   : "Visual ctermbg=DarkGrey"), reset, TRUE);
+				   : "Visual ctermbg=DarkGrey"), FALSE, TRUE);
     else
-	do_highlight((char_u *)"Visual cterm=reverse", reset, TRUE);
+	do_highlight((char_u *)"Visual cterm=reverse", FALSE, TRUE);
 
 #ifdef FEAT_SYN_HL
     /*
--- a/src/tag.c
+++ b/src/tag.c
@@ -3356,7 +3356,6 @@ expand_tag_fname(fname, tag_fname, expan
 	xpc.xp_context = EXPAND_FILES;
 	expanded_fname = ExpandOne(&xpc, (char_u *)fname, NULL,
 			    WILD_LIST_NOTFOUND|WILD_SILENT, WILD_EXPAND_FREE);
-	ExpandCleanup(&xpc);
 	if (expanded_fname != NULL)
 	    fname = expanded_fname;
     }
--- a/src/version.h
+++ b/src/version.h
@@ -35,6 +35,6 @@
  */
 #define VIM_VERSION_NODOT	"vim70e"
 #define VIM_VERSION_SHORT	"7.0e"
-#define VIM_VERSION_MEDIUM	"7.0e03 BETA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0e03 BETA (2006 Apr 19)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0e03 BETA (2006 Apr 19, compiled "
+#define VIM_VERSION_MEDIUM	"7.0e04 BETA"
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0e04 BETA (2006 Apr 20)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0e04 BETA (2006 Apr 20, compiled "