コード例 #1
0
ファイル: Expression.cs プロジェクト: Crondale/SassSharp
        public static ExpressionNode CalculateTree(ExpressionNode[] nodes)
        {
            if (nodes.Length == 0)
                return null;

            if (nodes.Length == 1) return nodes[0];

            if (nodes.Length == 2) return new CombineNode(nodes[0], nodes[1], nodes[1].Operator);

            var president = int.MaxValue;

            for (var i = 1; i < nodes.Length; i++)
            {
                var filter = nodes[i];
                var sortIndex = getOperatorIndex(filter.Operator);

                if (sortIndex < president) president = sortIndex;
            }

            var index = 0;
            var op = '+';
            for (index = 1; index < nodes.Length; index++)
            {
                var filter = nodes[index];
                if (getOperatorIndex(filter.Operator) == president)
                {
                    op = filter.Operator;
                    break;
                }
            }

            var a = CalculateTree(nodes.Take(index).ToArray());
            var b = CalculateTree(nodes.Skip(index).ToArray());

            return new CombineNode(a, b, op);
        }
コード例 #2
0
ファイル: Expression.cs プロジェクト: Crondale/SassSharp
        private static ValueList CalculateSpaceList(ExpressionNode[] nodes)
        {
            var result = new ValueList();
            var skip = 0;
            for (var i = 1; i < nodes.Length; i++)
            {
                var filter = nodes[i];

                if (filter.Operator == ' ')
                {
                    var a = CalculateList(nodes.Skip(skip).Take(i - skip).ToArray());
                    result.Add(a);
                    skip = i;
                }
            }

            result.Add(CalculateList(nodes.Skip(skip).ToArray()));

            return result;
        }