Exemple #1
0
        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}"));
            }
        }
Exemple #2
0
        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);
                    }
                }
            }
        }
Exemple #3
0
 public void WriteImportRule(ImportRule rule)
 {
     // TODO: normalize value
     writer.Write(rule.ToString());
 }
Exemple #4
0
        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}"));
            }
        }