protected override MLElement CreateTagElement(MLLexer lexer){
			// Only ever called at the top level - push the new child straight to the language set.
			LanguageElement result=new LanguageElement(Parent,lexer,true);
			if(result.Tag=="language"){
				LanguageTag language=result.Handler as LanguageTag;
				language.Apply(Parent,result);
			}else{
				// Must be a variable - if it isn't, error.
				VariableTag varTag=result.Handler as VariableTag;
				if(varTag==null){
					throw new Exception("<"+result.Tag+"> not expected here - this file supports only <var>/<v> and <language> at it's top level (anything can go inside var/v though).");
				}
				varTag.Parent=Parent;
			}
			return result;
		}
        protected override MLElement CreateTagElement(MLLexer lexer)
        {
            // Only ever called at the top level - push the new child straight to the language set.
            LanguageElement result = new LanguageElement(Parent, lexer, true);

            if (result.Tag == "language")
            {
                LanguageTag language = result.Handler as LanguageTag;
                language.Apply(Parent, result);
            }
            else
            {
                // Must be a variable - if it isn't, error.
                VariableTag varTag = result.Handler as VariableTag;
                if (varTag == null)
                {
                    throw new Exception("<" + result.Tag + "> not expected here - this file supports only <var>/<v> and <language> at it's top level (anything can go inside var/v though).");
                }
                varTag.Parent = Parent;
            }
            return(result);
        }