UxlDocument ParseDocument() { SourceValue?backend = null; SourceValue?cond = null; ParseAttributes( name => { switch (name) { case "Backend": backend = GetValue(); return(true); case "Condition": cond = GetValue(); return(true); default: return(false); } }); UxlBackendType backendType = 0; if (backend == null) { Log.Error(GetSource(), ErrorCode.E0000, "Expected 'Backend' attribute on <Extensions>"); } else if (!Enum.TryParse(backend.Value.String, out backendType) || backendType == UxlBackendType.Unknown) { Log.Error(backend.Value.Source, ErrorCode.E0000, "Unknown backend " + backend.Value.String.Quote()); } var result = new UxlDocument(File.Package, backendType, cond); ParseElements( name => { switch (name) { case "Using": ParseUsing(result); return(true); case "Define": ParseDefine(result); return(true); case "Declare": ParseDeclare(result); return(true); case "Deprecate": ParseDeprecate(result); return(true); case "Definition": Log.Warning(GetSource(), ErrorCode.W0000, "<Definition> is deprecated, replace with <Declare>"); ParseDeclare(result); return(true); case "Type": ParseType(name, result); return(true); case "Template": ParseTemplate(name, result.Templates); return(true); case "Library": Log.Warning(GetSource(), ErrorCode.W0000, "<Library> is deprecated, replace with <Template>"); ParseTemplate(name, result.Templates); return(true); case "Property": Log.Warning(GetSource(), ErrorCode.W0000, "<Property> is deprecated, replace with <Set>"); ParseSet(name, result.Elements); return(true); default: return(TryParseEntity(name, result)); } }); return(result); }
public UxlDocument(SourcePackage upk, UxlBackendType backend, SourceValue?cond) { Package = upk; Backend = backend; Condition = cond; }