ATMLCommonLibrary.utils.ElectricalUtils.ParseExpression C# (CSharp) Method

ParseExpression() public static method

public static ParseExpression ( String expression ) : List
expression String
return List
        public static List<Value> ParseExpression(String expression)
        {
            var numbers = new List<Value>();
            String qualifier = "";
            String[] parts = expression.Split(' ');
            Value v = null;
            bool isBuildingRange = false;
            bool isBuildingRangeTo = false;
            bool isBuildingErrLimit = false;
            bool isBuildingResolution = false;
            int i = 0;
            foreach (String part in parts)
            {
                if (0 == i++)
                {
                }

                //Test for qualifier - resets everything
                if (IsQualifier(part))
                {
                    qualifier = part;
                }
                else if (IsResolution(part))
                {
                    if (v == null)
                    {
                        v = new Value();
                        numbers.Add(v);
                    }
                    v.resoluion = new Value();
                    isBuildingResolution = true;
                }
                else if (IsRange(part))
                {
                    isBuildingRange = true;
                    isBuildingRangeTo = false;
                    Console.WriteLine("Start Building Range");
                    if (v == null)
                    {
                        v = new Value();
                        numbers.Add(v);
                    }
                    v.currentRange = new Range();
                    v.ranges.Add(v.currentRange);
                }
                else if (IsTo(part) && isBuildingRange)
                {
                    isBuildingRangeTo = true;
                    Console.WriteLine("Working on Range");
                    v.currentRange.to = new Value();
                }
                else if (IsErrorLimit(part))
                {
                    if (v == null)
                    {
                        v = new Value();
                        numbers.Add(v);
                    }
                    isBuildingErrLimit = true;
                    Console.WriteLine("Start Building ErrLmt");
                    if (isBuildingRange)
                        v.currentRange.errorLimit = new ErrorLimit();
                    else
                        v.errorLimit = new ErrorLimit();
                }
                else
                {
                    String val = null;
                    String unit = null;
                    String prefix = null;
                    String standardUnit = null;

                    ParseWord(part, out val, out standardUnit);
                    if (!String.IsNullOrEmpty(standardUnit))
                        ParseUnit(standardUnit, out prefix, out unit);

                    //--- Add To Error Limit ---//
                    if (isBuildingResolution)
                    {
                        if (!String.IsNullOrEmpty(val))
                            v.resoluion.value += val;
                        if (!String.IsNullOrEmpty(prefix))
                            v.resoluion.prefix += prefix;
                        if (!String.IsNullOrEmpty(unit))
                        {
                            v.resoluion.unit += unit;
                            v.standardUnit = standardUnit;
                            isBuildingResolution = false;
                        }
                    }
                    else if (isBuildingErrLimit)
                    {
                        if (isBuildingRange)
                        {
                            if (v.currentRange.errorLimit == null)
                                v.currentRange.errorLimit = new ErrorLimit();
                            if (!String.IsNullOrEmpty(val))
                                v.currentRange.errorLimit.From.value += val;
                            if (!String.IsNullOrEmpty(prefix))
                                v.currentRange.errorLimit.From.prefix += prefix;
                            if (!String.IsNullOrEmpty(unit))
                            {
                                v.currentRange.errorLimit.From.unit += unit;
                                v.currentRange.errorLimit.From.standardUnit = standardUnit;
                                isBuildingErrLimit = false;
                            }
                        }
                        else
                        {
                            if (v.errorLimit == null)
                                v.errorLimit = new ErrorLimit();
                            if (!String.IsNullOrEmpty(val))
                                v.errorLimit.From.value += val;
                            if (!String.IsNullOrEmpty(prefix))
                                v.errorLimit.From.prefix += prefix;
                            if (!String.IsNullOrEmpty(unit))
                            {
                                v.errorLimit.From.unit += unit;
                                v.errorLimit.From.standardUnit = standardUnit;
                                isBuildingErrLimit = false;
                            }
                        }
                    }
                        //--- Add To Range ---//
                    else if (isBuildingRange)
                    {
                        if (!isBuildingRangeTo)
                        {
                            if (!String.IsNullOrEmpty(val))
                                v.currentRange.from.value += val;
                            if (!String.IsNullOrEmpty(prefix))
                                v.currentRange.from.prefix += prefix;
                            if (!String.IsNullOrEmpty(unit))
                            {
                                v.currentRange.from.unit += unit;
                                v.currentRange.from.standardUnit = standardUnit;
                            }
                        }
                        else
                        {
                            if (!String.IsNullOrEmpty(val))
                                v.currentRange.to.value += val;
                            if (!String.IsNullOrEmpty(prefix))
                                v.currentRange.to.prefix += prefix;
                            if (!String.IsNullOrEmpty(unit))
                            {
                                v.currentRange.to.unit += unit;
                                v.currentRange.to.standardUnit = standardUnit;
                                //isBuildingRange = false;
                                //isBuildingRangeTo = false;
                                //v.currentRange = null;
                            }
                        }
                    }
                        //--- Add To Value ---//
                    else
                    {
                        if (!String.IsNullOrEmpty(val))
                        {
                            v = new Value();
                            numbers.Add(v);
                            v.value += val;
                        }
                        if (v != null)
                        {
                            if (!String.IsNullOrEmpty( prefix ))
                            {
                                v.prefix += prefix;
                            }
                            if (!String.IsNullOrEmpty( unit ))
                            {
                                v.unit += unit;
                                v.standardUnit = standardUnit;
                            }
                        }
                    }
                }
            }

            if (v != null && v.errorLimit != null && v.value != null )
            {
                v.errorLimit.ErrorLimitOf = double.Parse(v.value);
                v.errorLimit.StandardUnit = v.standardUnit;
            }

            Console.WriteLine("\tqualifier: " + qualifier);
            foreach (Value vv in numbers)
                Console.WriteLine("Value: " + vv.ToString());

            return numbers;
        }