private CartoRule(CartoRule rule) : base(rule.Name, rule.Value)
 {
     m_index    = rule.m_index;
     m_id       = rule.m_id;
     m_instance = rule.m_instance;
     m_zoom     = rule.m_zoom;
     m_parts    = rule.m_parts;
     Location   = rule.Location;
 }
 private CartoRule(CartoRule rule):base(rule.Name, rule.Value)
 {
   m_index = rule.m_index;
   m_id = rule.m_id;
   m_instance = rule.m_instance;
   m_zoom = rule.m_zoom;
   m_parts = rule.m_parts;
   Location = rule.Location;
 }
    public int AddRules(CartoRule[] rules)
    {
      int added = 0;

      // Add only unique rules.
      for (int i = 0; i < rules.Length; i++)
      {
        if (!m_ruleIndex.Contains(rules[i].Id))
        {
          m_rules.Add(rules[i]);
          m_ruleIndex.Add(rules[i].Id);
          added++;
        }
      }

      return added;
    }
    public CartoDefinition(CartoSelector selector, CartoRule[] rules)
    {
      m_rules = new NodeList<CartoRule>();
      m_elements = selector.Elements;
      m_filters = selector.Filters;
      m_rules.AddRange(rules);
      m_zoom = selector.Zoom;
      m_attachment = selector.Attachment ?? "__default__";
      m_ruleIndex = new List<string>();
      for (int i = 0; i < m_rules.Count; i++)
      {
        m_rules[i].Zoom = selector.Zoom;
        m_ruleIndex.Add(m_rules[i].Id);
      }

      m_specificity = selector.Specificity();
    }
        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);
        }
    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;
    }