private static void ParseModules(CssSchema schema, Queue <FileInfo> modules) { while (modules.Count > 0) { var moduleFile = modules.Dequeue(); if (!moduleFile.Exists) { continue; } var document = XDocument.Load(moduleFile.FullName); foreach (var element in document.Root.Elements()) { switch (element.Name.LocalName) { case "CssAtDirective": ParseDirective(schema, element); break; case "CssProperty": ParseProperty(schema, element); break; case "CssPropertyValue": ParsePropertyValue(schema, element); break; case "CssPseudo": ParsePseudo(schema, element); break; default: Logger.Log(string.Format("Unknown css schema element '{0}'", element.Name.LocalName)); break; } } } }
public static ICssSchema Parse(XDocument document, DirectoryInfo directory) { var schema = new CssSchema(); ParseBrowsers(schema, document); ParseModules(schema, CompileModules(document, directory)); return schema; }
public static ICssSchema Parse(XDocument document, DirectoryInfo directory) { var schema = new CssSchema(); ParseBrowsers(schema, document); ParseModules(schema, CompileModules(document, directory)); return(schema); }
private static void ParsePseudo(CssSchema schema, XElement element) { var name = element.Attribute("name"); var description = element.Attribute("description"); if (!schema._Pseudos.ContainsKey(name.Value)) { schema._Pseudos.Add(name.Value, new CssPseudo(name.Value, Optional(description))); } }
private static void ParsePropertyValue(CssSchema schema, XElement element) { var propertyName = element.Attribute("type"); CssProperty property; if (!schema._Properties.TryGetValue(propertyName.Value, out property)) { return; } AddValues(property, element); }
private static void ParseBrowsers(CssSchema schema, XDocument document) { foreach (var browser in document.Root.Elements("Browser")) { var name = browser.Attribute("name"); var abbreviation = browser.Attribute("abbreviation"); if (name != null && abbreviation != null && !schema._Browsers.ContainsKey(abbreviation.Value)) { schema._Browsers.Add(abbreviation.Value, new BrowserReference(abbreviation.Value, name.Value)); } } }
private static void ParseProperty(CssSchema schema, XElement element) { var name = element.Attribute("name") ?? element.Attribute("_locID"); // TODO: restriction // TODO: type var description = element.Attribute("description"); if (!schema._Properties.ContainsKey(name.Value)) { var property = new CssProperty(name.Value, Optional(description)); schema._Properties.Add(name.Value, property); AddValues(property, element); } }
public ICssSchema Load() { try { var path = Path.Combine(SchemaDirectory, "css-main.xml"); var file = new FileInfo(path); if (!file.Exists) { return(null); } var document = XDocument.Load(path); return(CssSchema.Parse(document, file.Directory)); } catch (Exception ex) { Logger.Log(ex, "Failed to load schema."); return(null); } }
private static void ParsePseudo(CssSchema schema, XElement element) { var name = element.Attribute("name"); var description = element.Attribute("description"); if (!schema._Pseudos.ContainsKey(name.Value)) schema._Pseudos.Add(name.Value, new CssPseudo(name.Value, Optional(description))); }
private static void ParsePropertyValue(CssSchema schema, XElement element) { var propertyName = element.Attribute("type"); CssProperty property; if (!schema._Properties.TryGetValue(propertyName.Value, out property)) return; AddValues(property, element); }
private static void ParseModules(CssSchema schema, Queue<FileInfo> modules) { while (modules.Count > 0) { var moduleFile = modules.Dequeue(); if (!moduleFile.Exists) continue; var document = XDocument.Load(moduleFile.FullName); foreach (var element in document.Root.Elements()) { switch (element.Name.LocalName) { case "CssAtDirective": ParseDirective(schema, element); break; case "CssProperty": ParseProperty(schema, element); break; case "CssPropertyValue": ParsePropertyValue(schema, element); break; case "CssPseudo": ParsePseudo(schema, element); break; default: Logger.Log(string.Format("Unknown css schema element '{0}'", element.Name.LocalName)); break; } } } }
private static void ParseBrowsers(CssSchema schema, XDocument document) { foreach (var browser in document.Root.Elements("Browser")) { var name = browser.Attribute("name"); var abbreviation = browser.Attribute("abbreviation"); if (name != null && abbreviation != null && !schema._Browsers.ContainsKey(abbreviation.Value)) schema._Browsers.Add(abbreviation.Value, new BrowserReference(abbreviation.Value, name.Value)); } }