コード例 #1
0
            public OneNumber(IDoubleInputToken t, ConversionDelegate convertToken)
            {
                _token   = t;
                _convert = convertToken;

                if (_token is DoubleToken)
                {
                    _result = _convert(GetValue(null).First());
                }
            }
コード例 #2
0
            public Range(IDoubleInputToken start, IDoubleInputToken step, IDoubleInputToken end, ConversionDelegate convertToken)
            {
                _start   = start;
                _step    = step;
                _end     = end;
                _convert = convertToken;

                if (_start is DoubleToken && _step is DoubleToken && _end is DoubleToken)
                {
                    _result = GetValue(null);
                }
            }
コード例 #3
0
            public Sequence(IDoubleInputToken start, IDoubleInputToken step, IDoubleInputToken count, ConversionDelegate convertToken)
            {
                _start   = start;
                _step    = step;
                _count   = count;
                _convert = convertToken;

                if (_start is DoubleToken && _step is DoubleToken && _count is DoubleToken)
                {
                    _result = GetValue(null);
                }
            }
コード例 #4
0
ファイル: dynBaseTypes.cs プロジェクト: TheChosen0ne/Dynamo
            public Sequence(IDoubleInputToken start, IDoubleInputToken step, IDoubleInputToken count, ConversionDelegate convertToken)
            {
                _start = start;
                _step = step;
                _count = count;
                _convert = convertToken;

                if (_start is DoubleToken && _step is DoubleToken && _count is DoubleToken)
                {
                    _result = GetValue(null);
                }
            }
コード例 #5
0
ファイル: dynBaseTypes.cs プロジェクト: TheChosen0ne/Dynamo
            public Range(IDoubleInputToken start, IDoubleInputToken step, IDoubleInputToken end, ConversionDelegate convertToken)
            {
                _start = start;
                _step = step;
                _end = end;
                _convert = convertToken;

                if (_start is DoubleToken && _step is DoubleToken && _end is DoubleToken)
                {
                    _result = GetValue(null);
                }
            }
コード例 #6
0
ファイル: dynBaseTypes.cs プロジェクト: TheChosen0ne/Dynamo
            public OneNumber(IDoubleInputToken t, ConversionDelegate convertToken)
            {
                _token = t;
                _convert = convertToken;

                if (_token is DoubleToken)
                    _result = _convert(GetValue(null).First());
            }
コード例 #7
0
ファイル: dynBaseTypes.cs プロジェクト: TheChosen0ne/Dynamo
 public CountRange(IDoubleInputToken startToken, IDoubleInputToken countToken, IDoubleInputToken endToken, ConversionDelegate convertToken)
     : base(startToken, countToken, endToken, convertToken)
 {
 }
コード例 #8
0
ファイル: dynBaseTypes.cs プロジェクト: TheChosen0ne/Dynamo
 public ApproxRange(IDoubleInputToken start, IDoubleInputToken step, IDoubleInputToken end, ConversionDelegate convertToken)
     : base(start, step, end, convertToken)
 {
 }
コード例 #9
0
 public ApproxRange(IDoubleInputToken start, IDoubleInputToken step, IDoubleInputToken end, ConversionDelegate convertToken)
     : base(start, step, end, convertToken)
 {
 }
コード例 #10
0
 public CountRange(IDoubleInputToken startToken, IDoubleInputToken countToken, IDoubleInputToken endToken, ConversionDelegate convertToken)
     : base(startToken, countToken, endToken, convertToken)
 {
 }
コード例 #11
0
        public static List <IDoubleSequence> ParseValue(string text, char[] seps, List <string> identifiers, ConversionDelegate convertToken)
        {
            var idSet = new HashSet <string>(identifiers);

            return(text.Replace(" ", "").Split(seps, StringSplitOptions.RemoveEmptyEntries).Select(
                       delegate(string x)
            {
                var rangeIdentifiers = x.Split(
                    RangeSeparatorTokens,
                    StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToArray();

                if (rangeIdentifiers.Length > 3)
                {
                    throw new Exception("Bad range syntax: not of format \"start..end[..(increment|#count)]\"");
                }

                if (rangeIdentifiers.Length == 0)
                {
                    throw new Exception("No identifiers found.");
                }

                IDoubleInputToken startToken = ParseToken(rangeIdentifiers[0], idSet, identifiers);

                if (rangeIdentifiers.Length > 1)
                {
                    if (rangeIdentifiers[1].StartsWith("#"))
                    {
                        var countToken = rangeIdentifiers[1].Substring(1);
                        IDoubleInputToken endToken = ParseToken(countToken, idSet, identifiers);

                        if (rangeIdentifiers.Length > 2)
                        {
                            if (rangeIdentifiers[2].StartsWith("#") || rangeIdentifiers[2].StartsWith("~"))
                            {
                                throw new Exception("Cannot use range or approx. identifier on increment field when one has already been used to specify a count.");
                            }
                            return new Sequence(startToken, ParseToken(rangeIdentifiers[2], idSet, identifiers), endToken, convertToken);
                        }

                        return new Sequence(startToken, new DoubleToken(1), endToken, convertToken) as IDoubleSequence;
                    }
                    else
                    {
                        IDoubleInputToken endToken = ParseToken(rangeIdentifiers[1], idSet, identifiers);

                        if (rangeIdentifiers.Length > 2)
                        {
                            if (rangeIdentifiers[2].StartsWith("#"))
                            {
                                var count = rangeIdentifiers[2].Substring(1);
                                IDoubleInputToken countToken = ParseToken(count, idSet, identifiers);

                                return new CountRange(startToken, countToken, endToken, convertToken);
                            }

                            if (rangeIdentifiers[2].StartsWith("~"))
                            {
                                var approx = rangeIdentifiers[2].Substring(1);
                                IDoubleInputToken approxToken = ParseToken(approx, idSet, identifiers);

                                return new ApproxRange(startToken, approxToken, endToken, convertToken);
                            }

                            return new Range(startToken, ParseToken(rangeIdentifiers[2], idSet, identifiers), endToken, convertToken);
                        }

                        double identifierValue0, identifierValue1;
                        var canBeParsed0 = System.Double.TryParse(rangeIdentifiers[0], out identifierValue0);
                        var canBeParsed1 = System.Double.TryParse(rangeIdentifiers[1], out identifierValue1);

                        //both of the value can be parsed as double
                        if (canBeParsed0 && canBeParsed1)
                        {
                            if (identifierValue0 < identifierValue1)
                            {
                                return new Range(startToken, new DoubleToken(1), endToken, convertToken) as IDoubleSequence;
                            }
                            else
                            {
                                return new Range(startToken, new DoubleToken(-1), endToken, convertToken) as IDoubleSequence;
                            }
                        }

                        //the input cannot be parsed as double, return a default function and let it handle the error
                        return new Range(startToken, new DoubleToken(1), endToken, convertToken) as IDoubleSequence;
                    }
                }

                return new OneNumber(startToken, convertToken) as IDoubleSequence;
            }).ToList());
        }