private void ImportInline(ImportRule rule) { if (resolver is null) { throw new ArgumentNullException(nameof(resolver)); } // var relativePath = importRule.Url; var absolutePath = rule.Url.GetAbsolutePath(resolver.ScopedPath); // Assume to be scss if there is no extension if (absolutePath.IndexOf('.') == -1) { absolutePath += ".scss"; } var stream = resolver.Open(absolutePath.TrimStart(Seperators.ForwardSlash)); if (stream != null) { if (absolutePath.EndsWith(".scss")) { AddChild(new CssComment($"imported: '{absolutePath}")); try { foreach (var node in Parse(stream, Context).Children) { AddChild(node); } } catch (SyntaxException ex) { AddChild(new StyleRule("body, html") { new CssDeclaration("background-color", "red", "important") }); AddChild(new StyleRule("body *") { { "display", "none" } }); AddChild(new CssComment($" --- Syntax error reading '{absolutePath}' : {ex.Message} --- ")); var sb = StringBuilderCache.Aquire(); if (ex.Lines != null) { foreach (var line in ex.Lines) { sb.Append(line.Number.ToString().PadLeft(5)); sb.Append(". "); if (line.Number == ex.Location.Line) { sb.Append("* "); } sb.AppendLine(line.Text); } } AddChild(new CssComment(StringBuilderCache.ExtractAndRelease(sb))); return; } } else { throw new Exception(".css include not supported"); // writer.Write(text); } } else { AddChild(new CssComment($"NOT FOUND: '{absolutePath}")); } }
public void InlineImport(ImportRule importRule, StyleSheet sheet) { // var relativePath = importRule.Url; var absolutePath = importRule.Url.GetAbsolutePath(resolver.ScopedPath); if (absolutePath[0] == '/') { absolutePath = absolutePath.TrimStart(Seperators.ForwardSlash); } // Assume to be scss if there is no extension if (!absolutePath.Contains('.')) { absolutePath += ".scss"; } writer.WriteLine(); writer.WriteLine("/* " + absolutePath + " */"); var stream = resolver.Open(absolutePath); if (stream == null) { writer.WriteLine("/* NOT FOUND */"); return; } if (absolutePath.EndsWith(".scss")) { try { var css = StyleSheet.Parse(stream, context); WriteRoot(css); } catch (SyntaxException ex) { writer.WriteLine("body, html { background-color: red !important; }"); writer.WriteLine("body * { display: none; }"); writer.WriteLine($"/* --- Parse Error in '{absolutePath}' : {ex.Message} "); if (ex.Lines != null) { foreach (var line in ex.Lines) { writer.Write(line.Number.ToString().PadLeft(4)); // 1 writer.Write(". "); if (line.Number == ex.Location.Line) { writer.Write("* "); } writer.WriteLine(line.Text); } } writer.Write("*/"); return; } } else { // Copy the file line by line... using (var reader = new StreamReader(stream)) { string line; while ((line = reader.ReadLine()) != null) { writer.WriteLine(line); } } } }
public void WriteImportRule(ImportRule rule) { // TODO: normalize value writer.Write(rule.ToString()); }
private void ImportInline(ImportRule rule) { // var relativePath = importRule.Url; var absolutePath = rule.Url.GetAbsolutePath(resolver.ScopedPath); // Assume to be scss if there is no extension if (!absolutePath.Contains('.')) { absolutePath += ".scss"; } var stream = resolver.Open(absolutePath.TrimStart(Seperators.ForwardSlash)); if (stream != null) { if (absolutePath.EndsWith(".scss")) { AddChild(new CssComment($"imported: '{absolutePath}")); try { foreach (var node in Parse(stream, Context).Children) { AddChild(node); } } catch (SyntaxException ex) { AddChild(new StyleRule("body, html") { new CssDeclaration("background-color", "red", "important") }); AddChild(new StyleRule("body *") { { "display", "none" } }); AddChild(new CssComment($" --- Syntax error reading '{absolutePath}' : {ex.Message} --- ")); var sb = new StringBuilder(); if (ex.Lines != null) { foreach (var line in ex.Lines) { sb.Append(line.Number.ToString().PadLeft(5)); sb.Append(". "); if (line.Number == ex.Location.Line) { sb.Append("* "); } sb.AppendLine(line.Text); } } AddChild(new CssComment(sb.ToString())); return; } } else { throw new Exception(".css include not supported"); // writer.Write(text); } } else { AddChild(new CssComment($"NOT FOUND: '{absolutePath}")); } }