예제 #1
0
        ///////////////////////////////////////////////////////////////////////

        internal ArgumentList( /* NOTE: For [apply] and [proc] use only. */
            StringPairList list,
            ArgumentFlags flags
            )
            : this()
        {
            if (list != null)
            {
                int count = list.Count;

                for (int index = 0; index < count; index++)
                {
                    IPair <string> element = list[index];

                    //
                    // HACK: Skip over any null entries, thus ignoring
                    //       them.
                    //
                    if (element == null)
                    {
                        continue;
                    }

                    //
                    // NOTE: Does this argument list accept a variable
                    //       numbers of arguments (COMPAT: Tcl)?  If so,
                    //       add a flag to the final argument to mark it
                    //       as an "argument list".
                    //
                    ArgumentFlags nameFlags = ArgumentFlags.None;

                    if ((index == (count - 1)) && String.Compare(
                            element.X, TclVars.Arguments,
                            StringOps.SystemStringComparisonType) == 0)
                    {
                        nameFlags |= ArgumentFlags.ArgumentList;
                    }

                    ArgumentFlags valueFlags = (element.Y != null) ?
                                               ArgumentFlags.HasDefault : ArgumentFlags.None;

                    Argument argument;

                    if (FlagOps.HasFlags(flags, ArgumentFlags.NameOnly, true))
                    {
                        argument = Argument.InternalCreate(
                            flags | nameFlags | valueFlags, element.X,
                            Argument.NoValue, element.Y);
                    }
                    else
                    {
                        argument = Argument.InternalCreate(
                            flags | nameFlags | valueFlags, Argument.NoName,
                            element.X, element.Y);
                    }

                    this.Add(argument);
                }
            }
        }
예제 #2
0
        ///////////////////////////////////////////////////////////////////////

        public IStringList ToList(
            string pattern,
            bool empty,
            bool noCase
            )
        {
            StringPairList inputList;
            StringPairList outputList = new StringPairList();

            if (empty)
            {
                inputList = this;
            }
            else
            {
                inputList = new StringPairList();

                foreach (IPair <string> element in this)
                {
                    if (element == null)
                    {
                        continue;
                    }

                    if (String.IsNullOrEmpty(element.X) &&
                        String.IsNullOrEmpty(element.Y))
                    {
                        continue;
                    }

                    inputList.Add(element);
                }
            }

            ReturnCode code;
            Result     error = null;

            code = GenericOps <IPair <string> > .FilterList(
                inputList, outputList, Index.Invalid, Index.Invalid,
                ToStringFlags.None, pattern, noCase, ref error);

            if (code != ReturnCode.Ok)
            {
                DebugOps.Complain(code, error);

                //
                // TODO: Return null in the error case here?
                //
                outputList = null;
            }

            return(outputList);
        }
예제 #3
0
        ///////////////////////////////////////////////////////////////////////

        public StringPairList ToPairs(
            string pattern,
            bool noCase
            )
        {
            StringPairList list = new StringPairList();

            foreach (KeyValuePair <string, string> pair in this)
            {
                if ((pattern == null) ||
                    Parser.StringMatch(null, pair.Key, 0, pattern, 0, noCase))
                {
                    list.Add(pair.Key, pair.Value);
                }
            }

            return(list);
        }
예제 #4
0
        ///////////////////////////////////////////////////////////////////////

        public string ToString(
            string separator,
            string pattern,
            bool empty,
            bool noCase
            )
        {
            if (empty)
            {
                return(GenericOps <IPair <string> > .ListToString(
                           this, Index.Invalid, Index.Invalid, ToStringFlags.None,
                           separator, pattern, noCase));
            }
            else
            {
                StringPairList result = new StringPairList();

                foreach (IPair <string> element in this)
                {
                    if (element == null)
                    {
                        continue;
                    }

                    if (String.IsNullOrEmpty(element.X) &&
                        String.IsNullOrEmpty(element.Y))
                    {
                        continue;
                    }

                    result.Add(element);
                }

                return(GenericOps <IPair <string> > .ListToString(
                           result, Index.Invalid, Index.Invalid, ToStringFlags.None,
                           separator, pattern, noCase));
            }
        }