Beispiel #1
0
        public bool AddFromString(BaseUtils.StringParser p, FromMode fm, Dictionary <string, string> altops = null)
        {
            Dictionary <string, string> newvars = ReadFromString(p, fm, altops);

            if (newvars != null)
            {
                Add(newvars);
            }
            return(newvars != null);
        }
Beispiel #2
0
 public ConditionVariables(string s, FromMode fm)     //v=1,v=2 no brackets
 {
     FromString(s, fm);
 }
Beispiel #3
0
        private Dictionary <string, string> ReadFromString(BaseUtils.StringParser p, FromMode fm, Dictionary <string, string> altops = null)
        {
            Dictionary <string, string> newvars = new Dictionary <string, string>();

            while (!p.IsEOL)
            {
                string varname = p.NextQuotedWord("= ");

                if (varname == null)
                {
                    return(null);
                }

                if (altops != null)         // with extended ops, the ops are returned in the altops function, one per variable found
                {                           // used only with let and set..
                    if (varname.EndsWith("$+"))
                    {
                        varname         = varname.Substring(0, varname.Length - 2);
                        altops[varname] = "$+=";
                    }
                    else if (varname.EndsWith("$"))
                    {
                        varname         = varname.Substring(0, varname.Length - 1);
                        altops[varname] = "$=";
                    }
                    else if (varname.EndsWith("+"))
                    {
                        varname         = varname.Substring(0, varname.Length - 1);
                        altops[varname] = "+=";
                    }
                    else
                    {
                        altops[varname] = "=";             // varname is good, it ended with a = or space, default is =

                        bool dollar = p.IsCharMoveOn('$'); // check for varname space $+
                        bool add    = p.IsCharMoveOn('+');

                        if (dollar && add)
                        {
                            altops[varname] = "$+=";
                        }
                        else if (dollar)
                        {
                            altops[varname] = "$=";
                        }
                        else if (add)
                        {
                            altops[varname] = "+=";
                        }
                    }
                }

                if (!p.IsCharMoveOn('='))
                {
                    return(null);
                }

                string value = (fm == FromMode.OnePerLine) ? p.NextQuotedWordOrLine() : p.NextQuotedWord((fm == FromMode.MultiEntryComma) ? ", " : ",) ");

                if (value == null)
                {
                    return(null);
                }

                newvars[varname] = value;

                if (fm == FromMode.MultiEntryCommaBracketEnds && p.PeekChar() == ')')        // bracket, stop don't remove.. outer bit wants to check its there..
                {
                    return(newvars);
                }
                else if (fm == FromMode.OnePerLine && !p.IsEOL)        // single entry, must be eol now
                {
                    return(null);
                }
                else if (!p.IsEOL && !p.IsCharMoveOn(','))   // if not EOL, but not comma, incorrectly formed list
                {
                    return(null);
                }
            }

            return(newvars);
        }
Beispiel #4
0
 public bool FromString(string s, FromMode fm)    // string, not bracketed.
 {
     BaseUtils.StringParser p = new BaseUtils.StringParser(s);
     return(FromString(p, fm));
 }