public string GetValue(Env env)
    {
      if (m_strValue == null)
        m_strValue = m_value.ToCSS(env);

      return m_strValue;
    }
    public CartoSelector(IEnumerable<Element> elements, Env env)
      : base(elements)
    {
      m_filters = new CartoFilterSet();
      m_zooms = new NodeList<CartoZoomElement>();
      m_elements = new NodeList<CartoElement>();

      m_conditions = 0;
      if (env == null)
      	env = new Env(); // TODO
      
      foreach (Element elem in elements)
      {
        if (elem is CartoFilterElement)
        {
          m_filters.Add(elem as CartoFilterElement, env);
          m_conditions++;
        }
        else if (elem is CartoZoomElement)
        {
          m_zooms.Add(elem as CartoZoomElement);
          m_conditions++;
        }
        else if (elem is CartoAttachmentElement)
          m_attachment = (elem as CartoAttachmentElement).Value;
        else
          m_elements.Add((CartoElement)elem);
      }
    }
Exemple #3
0
 public override Node Evaluate(Env env)
 {
     return new TextNode(string.Format("[{0}{1}{2}]", 
         Name.Evaluate(env).ToCSS(env),
         Op == null ? "" : Op.Evaluate(env).ToCSS(env), 
         Value == null ? "" :  Value.Evaluate(env).ToCSS(env)));
 }
 public CartoReaderContext(Env env, ICartoTranslator translator)
 {
   NodeValues = new Dictionary<int, string>();
   Env = env;
   Translator = translator;
   _lockObj = new object();
 }
		/// <summary></summary>
		/// <param name="env"></param>
		/// <returns></returns>
		protected override Node Evaluate(Env env)
		{
			// validate arguments
			if (Arguments.Count != 1)
				throw new ParserException("The DynamicResourcePathFunction should be invoked with exactly one parameter");

			// unescape
			Func<Node, string> unescape = n => n is Quoted ? ((Quoted) n).UnescapeContents() : n.ToCSS(env);

			// get the path
			var relativePath = unescape(Arguments[0]);

			// get the web context
			var context = DotLessContextHelper.GetContext();

			// create the url
			var url = Url.CreateUrl(context);

			// assemble the path
			url.PathSegments = WebUtilities.CombineIntoRelativeUrl(DynamicResourceRequestHandler.Prefix, relativePath);
			url.CanHaveExtension = true;

			// return the result
			return new Quoted(url.ToString(), '\'', false);
		}
    public bool CanCloneWith(CartoFilterSet other, Env env)
    {
      int additions = 0;

      if (m_filters.Count > 0)
      {
        foreach (KeyValuePair<string, CartoFilterElement> kv in other.m_filters)
        {
          string id = kv.Key;
          object status = this.Addable(kv.Value, env);
          if (status != null)
          {
            if ((bool)status == false)
            {
              return true;
            }
            if ((bool)status == true)
            {
              additions++;
            }
          }
        }
      }
      else
      {
        additions += other.m_filters.Count;
      }

      return additions > 0;
    }
 public override Node Evaluate(Env env)
 {
     if (Condition.Passes(env))
     {
         return EvaluateRulesForFrame(this, env);
     }
     return new NodeList();
 }
Exemple #8
0
        public override Node Evaluate(Env env)
        {
            env.Frames.Push(this);

            Rules = new NodeList(Rules.Select(r => r.Evaluate(env))).ReducedFrom<NodeList>(Rules);

            env.Frames.Pop();
            return this;
        }
        public void RegisteringSingleFunctionInDifferentEnvironmentsWorks() {
            var env = new Env();
            env.AddPlugin(new TestPlugin1());

            Assert.DoesNotThrow(() => {
                var newEnv = new Env();
                newEnv.AddPlugin(new TestPlugin1());
            });
        }
    public CartoFilterElement(Node key, Node op, Node value, Combinator combinator, Env env)
      : base(combinator, value)
    {
      m_key = key;
      m_op = op;
      m_value = value;

      m_id = "[" + m_key.ToString() + "]" + m_op.ToString() + m_value.ToCSS(env).ToString();
    }
 public CartoDefinition(CartoDefinition def, CartoFilterSet filters, Env env)
 {
   m_rules = CreateCopy(def.Rules);
   m_elements = new NodeList<CartoElement>(def.m_elements);
   m_ruleIndex = new List<string>(def.m_ruleIndex);
   m_filters = filters != null ? filters : (CartoFilterSet)def.Filters.Clone(env);
   m_attachment = def.Attachment;
   m_zoom = def.m_zoom;
   m_specificity = def.m_specificity;
 }
        protected override Node Eval(Env env, Node[] list, Node[] args)
        {
            Guard.ExpectNumArguments(1, args.Length, this, Location);
            Guard.ExpectNode<Number>(args[0], this, args[0].Location);

            var index = (int)(args[0] as Number).Value;

            // Extract function indecies are 1-based
            return list[index-1];
        }
Exemple #13
0
        public override void AppendCSS(Env env, Context context)
        {
            env.Output.Append(Identifier);

            // Append pre comments as we out put each rule ourselves
            if (Rules.PreComments)
            {
                env.Output.Append(Rules.PreComments);
            }

            AppendRules(env);
        }
 /// <summary>
 /// Removes dead style definitions that can never be reached
 /// when filter-mode="first". The style is modified in-place
 /// and returned. The style must be sorted.
 /// </summary>
 public void Fold(Env env)
 {
     for (int i = 0; i < Definitions.Count; i++) 
     {
        CartoDefinition defI = Definitions[i];
        for (int j = Definitions.Count - 1; j > i; j--) 
        {
         // if (Definitions[j].Filters.CloneWith(defI.Filters, env) == null) // Runge: replace with a bit faster version
          if (Definitions[j].Filters.CanCloneWith(defI.Filters, env) == false)
            Definitions.RemoveAt(j);
        }
     }    
 }
    public override Node Evaluate(Env env)
    {
      int minZoom = 0;
      int maxZoom = int.MaxValue;
      m_zoom = 0;

     Node node = m_value.Evaluate(env);
      
      Number number = node as Number;

      int value = 0;
    
      if (number != null) 
      	value =  Convert.ToInt32(number.ToNumber());
      else
      	value =  Convert.ToInt32(node.ToString());

      if (value > MAX_ZOOM || value < 0)
        throw new Exception(string.Format("Zoom '{0}' level is out of range", value));

      string comp = m_comp.ToString();

      switch (comp)
      {
        case "=":
          m_zoom = 1 << value;
          return this;
        case ">":
          minZoom = value + 1;
          break;
        case ">=":
          minZoom = value;
          break;
        case "<":
          maxZoom = value - 1;
          break;
        case "<=":
          maxZoom = value;
          break;
      }

      for (var i = 0; i <= MAX_ZOOM; i++)
      {
        if (i >= minZoom && i <= maxZoom)
        {
          m_zoom |= (1 << i);
        }
      }

      return base.Evaluate(env);
    }
Exemple #16
0
 public void AddExtension(Selector selector, Env env)
 {
     var path = new List<Selector>();
     path.Add(selector);
     foreach (var f in env.Frames.Skip(1))
     {
         var partialSelector = f.Selectors.FirstOrDefault();
         if (partialSelector != null)
         {
             path.Add(partialSelector);
         }
     }
     ExtendedBy.Add(new Selector(new[] { new Element(null, path.Select(p => p.ToCSS(env)).Reverse().JoinStrings("").Trim()) }));
 }
    public override Node Evaluate(Env env)
    {
      env.Rule = this;

      if (Value == null)
      {
        throw new ParsingException("No value found for rule " + Name, Location);
      }

      var rule = new CartoRule(Name, Value.Evaluate(env)).ReducedFrom<CartoRule>(this);
      rule.IsSemiColonRequired = this.IsSemiColonRequired;
      rule.PostNameComments = this.PostNameComments;

      env.Rule = null;

      return rule;
    }
Exemple #18
0
        public override Node Evaluate(Env env)
        {
            var newExact = new List<Selector>();
            foreach (var e in Exact)
            {
                var childContext = env.CreateChildEnv(new Stack<Ruleset>(env.Frames.Reverse()));
                e.AppendCSS(childContext);
                newExact.Add(new Selector(new []{new Element(e.Elements.First().Combinator,childContext.Output.ToString().Trim())}));
            }

            var newPartial = new List<Selector>();
            foreach (var e in Partial)
            {
                var childContext = env.CreateChildEnv(new Stack<Ruleset>(env.Frames.Reverse()));
                e.AppendCSS(childContext);
                newPartial.Add(new Selector(new[] { new Element(e.Elements.First().Combinator, childContext.Output.ToString().Trim()) }));
            }

            return new Extend(newExact,newPartial);
        }
Exemple #19
0
        public override Node Evaluate(Env env)
        {
            var newExact = new List<Selector>();
            foreach (var e in Exact)
            {
                var childContext = env.CreateChildEnv();
                e.AppendCSS(childContext);
                var selector = new Selector(new []{new Element(e.Elements.First().Combinator,childContext.Output.ToString().Trim())});
                selector.IsReference = IsReference;
                newExact.Add(selector);
            }

            var newPartial = new List<Selector>();
            foreach (var e in Partial)
            {
                var childContext = env.CreateChildEnv();
                e.AppendCSS(childContext);
                var selector = new Selector(new[] { new Element(e.Elements.First().Combinator, childContext.Output.ToString().Trim()) });
                selector.IsReference = IsReference;
                newPartial.Add(selector);
            }

            return new Extend(newExact,newPartial) { IsReference = IsReference, Location = Location };
        }
Exemple #20
0
        public override dotless.Core.Parser.Infrastructure.Nodes.Node Evaluate(dotless.Core.Parser.Infrastructure.Env env)
        {
            if (!string.IsNullOrEmpty(Unit) && !Contains(all_units, Unit))
            {
                env.Logger.Error("Invalid unit: '" + Unit + "'");
            }

            if (!string.IsNullOrEmpty(Unit) && Contains(physical_units, Unit))
            {
                //if (!env.ppi)

                // convert all units to inch
                // convert inch to px using ppi
                if (!"px".Equals(Unit))
                {
                    Value = (Value / densities[Unit]) * DPI;
                    //m_unit = "px";
                }

                Unit = "";
            }

            return(this);
        }
Exemple #21
0
        private Selector GenerateExtenderSelector(Env env, List <IEnumerable <Selector> > selectorPath)
        {
            var context = GenerateExtenderSelector(selectorPath);

            return(new Selector(new[] { new Element(null, context.ToCss(env)) }));
        }
 public object Clone(Env env)
 {
   CartoDefinition clone = new CartoDefinition(this, null, env);      
   return clone;
 }
 public virtual void OnPreVisiting(Env env)
 {
 }
 public virtual void OnPostVisiting(Env env)
 {
 }
Exemple #25
0
        public void OutputMinificationDoesNotBreakMixinCalls()
        {
            var input = @"
            .pull-right > .dropdown-menu {
              right: 0;
              left: auto;
            }

            @media (min-width: 768px) {
              .navbar-right {
            .dropdown-menu {
              .pull-right > .dropdown-menu();
            }
              }
            }";

            var expected = @"
            .pull-right>.dropdown-menu{right:0;left:auto}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}";

            DefaultEnv = () => {
                var env = new Env();
                env.Compress = true;
                return env;
            };

            AssertLess(input, expected);
        }
Exemple #26
0
 public override Node Evaluate(Env env)
 {
     var node = (CssFunctionList) Clone();
     node.Inner = Inner.Select(i => i.Evaluate(env)).ToList();
     return node;
 }
Exemple #27
0
 public override void AppendCSS(Env env)
 {
     
 }
 public object Clone(CartoFilterSet filters, Env env)
 {
   CartoDefinition clone = new CartoDefinition(this, filters, env);
   return clone;
 }
Exemple #29
0
 public void RegisterExtensionsFrom(Env child)
 {
     _extensions.AddRange(child._extensions);
 }
Exemple #30
0
 public override void AppendCSS(Env env)
 {
     env.Output.AppendMany(Inner, " ");
 }
Exemple #31
0
 public override void AppendCSS(Env env)
 {
     env.Output.Append(string.Format("{0}({1})", Name, Value.ToCSS(env)));
 }
 public Selector Selector(NodeList<Element> elements, NodeLocation location, Env env)
 {
   return new CartoSelector(elements, env) { Location = location };
 }
Exemple #33
0
 public override Node Evaluate(Env env)
 {
     var node = (CssFunction)Clone();
     node.Value = Value.Evaluate(env);
     return node;
 }