コード例 #1
0
 public override CssValue Evaluate(ScssEnvironment env)
 {
     var l = Left.Evaluate(env);
     var r = Right.Evaluate(env);
     if (l.Type == CssValueType.Number) {
         var t = l;
         l = r;
         r = t;
     }
     if (r.Type == CssValueType.Number) {
         switch (l.Type) {
             case CssValueType.Number:
             case CssValueType.Percentage:
             case CssValueType.Pixel:
             case CssValueType.Em:
             case CssValueType.Rem:
             case CssValueType.ViewportWidth:
             case CssValueType.ViewportHeight:
             case CssValueType.Inch:
             case CssValueType.Centimeter:
                 return new CssValue {
                     Type = l.Type,
                     Number = l.Number * r.Number
                 };
         }
     }
     throw new Exception("unit mismatch");
 }
コード例 #2
0
 public override CssValue Evaluate(ScssEnvironment env)
 {
     return new CssValue {
         Color = Color,
         Type = CssValueType.Color
     };
 }
コード例 #3
0
 public override CssValue Evaluate(ScssEnvironment env)
 {
     return new CssValue {
         Number = Value,
         Type = CssValueType.Number
     };
 }
コード例 #4
0
 public override CssValue Evaluate(ScssEnvironment env)
 {
     return new CssValue {
         Type = CssValueType.String,
         String = Value
     };
 }
コード例 #5
0
 public void ParserTest()
 {
     var parser = new ScssParser();
     var doc = parser.Parse("p { width: 20px; }");
     var env = new ScssEnvironment();
     doc.Compile(env);
     Assert.AreEqual("p{width:20px;}", env.Document.ToString());
 }
コード例 #6
0
 public override string Evaluate(ScssEnvironment env)
 {
     var sb = new StringBuilder();
     foreach (var expr in Expressions) {
         sb.Append(expr.Evaluate(env));
     }
     return sb.ToString();
 }
コード例 #7
0
 public override CssValue Evaluate(ScssEnvironment env)
 {
     var val = Inner.Evaluate(env);
     return new CssValue {
         Number = val.Number,
         Type = Type
     };
 }
コード例 #8
0
 public void NestedRuleParserTest()
 {
     var parser = new ScssParser();
     var doc = parser.Parse(@"
     div {
     p {
     width: 20px;
     }
     span {
     color: red;
     &:hover {
     color: green;
     &:after {
         display: none;
     }
     span {
         color: blue;
     }
     }
     }
     }");
     var env = new ScssEnvironment();
     doc.Compile(env);
     AssertExt.AreEqual(new CssDocument {
         Rules = {
             new CssQualifiedRule ("div"),
             new CssQualifiedRule ("div p") {
                 Declarations = {
                     new CssDeclaration("width", "20px")
                 }
             },
             new CssQualifiedRule ("div span") {
                 Declarations = {
                     new CssDeclaration("color", "red")
                 }
             },
             new CssQualifiedRule ("div span:hover") {
                 Declarations = {
                     new CssDeclaration("color", "green"),
                 }
             },
             new CssQualifiedRule ("div span:hover:after") {
                 Declarations = {
                     new CssDeclaration("display", "none")
                 }
             },
             new CssQualifiedRule ("div span:hover span") {
                 Declarations = {
                     new CssDeclaration("color", "blue"),
                 }
             },
         }
     }, env.Document);
 }
コード例 #9
0
 public override CssValue Evaluate(ScssEnvironment env)
 {
     var sb = new StringBuilder();
     foreach (var expr in Expressions) {
         if (sb.Length != 0) sb.Append(' ');
         sb.Append(expr.Evaluate(env));
     }
     return new CssValue {
         String = sb.ToString(),
         Type = CssValueType.String
     };
 }
コード例 #10
0
ファイル: RuleSetNode.cs プロジェクト: SavchukSergey/ScssRun
        public override void Compile(ScssEnvironment env)
        {
            env.PushRule(Selector);
            foreach (var node in Rules.Nodes) {
                node.Compile(env);
            }
            env.Document.Rules.Add(env.CssRule);

            foreach (var subRule in RuleSets.Nodes) {
                subRule.Compile(env);
            }
            env.PopRule();
        }
コード例 #11
0
 public override CssValue Evaluate(ScssEnvironment env)
 {
     var l = Inner.Evaluate(env);
     switch (l.Type) {
         case CssValueType.Number:
         case CssValueType.Percentage:
         case CssValueType.Pixel:
         case CssValueType.Em:
         case CssValueType.Rem:
         case CssValueType.ViewportWidth:
         case CssValueType.ViewportHeight:
         case CssValueType.Inch:
             return new CssValue {
                 Type = l.Type,
                 Number = -l.Number
             };
         default:
             throw new Exception("unit mismatch");
     }
 }
コード例 #12
0
 public override void Compile(ScssEnvironment env)
 {
     foreach (var rule in Rules) {
         rule.Compile(env);
     }
 }
コード例 #13
0
ファイル: Expression.cs プロジェクト: SavchukSergey/ScssRun
 public abstract CssValue Evaluate(ScssEnvironment env);
コード例 #14
0
ファイル: BaseNode.cs プロジェクト: SavchukSergey/ScssRun
 public abstract void Compile(ScssEnvironment env);
コード例 #15
0
 public override void Compile(ScssEnvironment env)
 {
     foreach (var node in Nodes) {
         node.Compile(env);
     }
 }
コード例 #16
0
ファイル: ValuesNode.cs プロジェクト: SavchukSergey/ScssRun
 public override void Compile(ScssEnvironment env)
 {
     env.CssRule.Declarations.Add(new CssDeclaration { Name = env.FormatProperty(), Value = Value.Evaluate(env).ToString() });
 }
コード例 #17
0
 public abstract string Evaluate(ScssEnvironment env);
コード例 #18
0
        public void SimpleParseTest()
        {
            const string input = @"
            #main p {
              color: #eeffdd;
              width: 97%;

              .redbox {
            background-color: #ffbca8;
            color: #bfadef;
              }
            }";
            var doc = new ScssParser().Parse(input);
            var env = new ScssEnvironment();
            doc.Compile(env);
            var css = env.Document.ToString();
        }
コード例 #19
0
 public override string Evaluate(ScssEnvironment env)
 {
     return Inner.Evaluate(env);
 }
コード例 #20
0
 public override string Evaluate(ScssEnvironment env)
 {
     return Left.Evaluate(env) + "+" + Right.Evaluate(env);
 }
コード例 #21
0
 public override string Evaluate(ScssEnvironment env)
 {
     return "." + ClassName;
 }
コード例 #22
0
 public override string Evaluate(ScssEnvironment env)
 {
     return $"[{AttributeName}]";
 }
コード例 #23
0
ファイル: IdSelector.cs プロジェクト: SavchukSergey/ScssRun
 public override string Evaluate(ScssEnvironment env)
 {
     return "#" + Id;
 }
コード例 #24
0
ファイル: CommentNode.cs プロジェクト: SavchukSergey/ScssRun
 public override void Compile(ScssEnvironment env)
 {
     //TODO:
     throw new System.NotImplementedException();
 }
コード例 #25
0
ファイル: TypeSelector.cs プロジェクト: SavchukSergey/ScssRun
 public override string Evaluate(ScssEnvironment env)
 {
     return TypeName;
 }
コード例 #26
0
 public override string Evaluate(ScssEnvironment env)
 {
     return $":not({Inner.Evaluate(env)})";
 }
コード例 #27
0
 public override void Compile(ScssEnvironment env)
 {
     env.PushProperty(Property);
     Value.Compile(env);
     env.PopProperty();
 }