Example #1
0
        List <IngredientDetail> Split(String ingredientString)
        {
            List <IngredientDetail> ingredients = new List <IngredientDetail>();
            enumMode parseMode = enumMode.normalMode;
            int      i         = 0;
            String   ingredient;

            ingredient = "";
            int parenNestingLevel, squareBracketNestingLevel;

            parenNestingLevel           = 0; squareBracketNestingLevel = 0;
            containsLessThanSomePerCent = 0;
            try {
                while (true)
                {
                    switch (parseMode)
                    {
                    case enumMode.normalMode:
                        switch (ingredientString.Substring(i, 1))
                        {
                        case ",":
                            // We found the end of an ingredient. Add it to the list and start over.
                            AddIngredient(ingredient, ingredients);
                            ingredient = "";
                            i++;
                            break;

                        case "[":
                            squareBracketNestingLevel++;
                            parseMode   = enumMode.inNestingMode;
                            ingredient += ingredientString.Substring(i, 1);
                            i++;
                            break;

                        case "(":
                            parenNestingLevel++;
                            parseMode   = enumMode.inNestingMode;
                            ingredient += ingredientString.Substring(i, 1);
                            i++;
                            break;

                        default:
                            ingredient += ingredientString.Substring(i, 1);
                            i++;
                            break;
                        }
                        break;

                    case enumMode.inNestingMode:
                        switch (ingredientString.Substring(i, 1))
                        {
                        case "]":
                            // There are some ingredient lists that have un-matched [] pairs. There don't seem to be unmatched () pairs but...
                            if (squareBracketNestingLevel > 0)
                            {
                                squareBracketNestingLevel--;
                            }
                            if (squareBracketNestingLevel == 0 && parenNestingLevel == 0)
                            {
                                parseMode   = enumMode.normalMode;
                                ingredient += ingredientString.Substring(i, 1);
                            }
                            i++;
                            break;

                        case ")":
                            // There are some ingredient lists that have un-matched [] pairs. There don't seem to be unmatched () pairs but...
                            if (parenNestingLevel > 0)
                            {
                                parenNestingLevel--;
                            }
                            if (parenNestingLevel == 0 && squareBracketNestingLevel == 0)
                            {
                                parseMode   = enumMode.normalMode;
                                ingredient += ingredientString.Substring(i, 1);
                                squareBracketNestingLevel = 0;                  // Force the square bracket nesting to be closed. It's dirty data!
                            }
                            i++;
                            break;

                        case "[":
                            squareBracketNestingLevel++;
                            ingredient += ingredientString.Substring(i, 1);
                            i++;
                            break;

                        case "(":
                            parenNestingLevel++;
                            ingredient += ingredientString.Substring(i, 1);
                            i++;
                            break;

                        default:
                            ingredient += ingredientString.Substring(i, 1);
                            i++;
                            break;
                        }
                        break;
                    }
                }
            } catch (Exception ex) { Utils.Log(ex.Message); }
            AddIngredient(ingredient, ingredients);
            return(ingredients);
        }
 // ########### Sets and Gets ###########
 // Set the mode in which the SpectraCyber will operate
 private void SetMode(enumMode eMode)
 {
     // TODO: Allow mode switching to take place in the Command Queue
     // so that one may schedule scanning proceesses
     meMode = eMode;
 }