Beispiel #1
0
        static void WriteReductionMethod(TextWriter writer, ConfigCommandMethod method)
        {
            writer.Write("		protected abstract Type_");
            writer.Write(method.Using.Label.Text);
            writer.Write(' ');
            writer.Write(method.Name.Text);
            writer.Write('(');

            var paramNames = GetParamNames(method);

            if (method.Arguments.Count > 0)
            {
                WriteSegmentType(writer, method.Arguments[0]);
                writer.Write(' ');
                writer.Write(paramNames[0]);

                for (var i = 1; i < method.Arguments.Count; i++)
                {
                    writer.Write(", ");
                    WriteSegmentType(writer, method.Arguments[i]);
                    writer.Write(' ');
                    writer.Write(paramNames[i]);
                }
            }

            writer.WriteLine(");");
        }
 void IConfigCommandVisitor.Visit(ConfigCommandMethod method)
 {
     foreach (var command in method.Arguments)
     {
         command.Apply(this);
     }
 }
Beispiel #3
0
        void IConfigCommandVisitor.Visit(ConfigCommandMethod method)
        {
            _writer.Write(method.Name.Text);
            _writer.Write("(");

            using (IEnumerator <ConfigCommand> enumerator = method.Arguments.GetEnumerator())
            {
                if (enumerator.MoveNext())
                {
                    enumerator.Current.Apply(this);

                    while (enumerator.MoveNext())
                    {
                        _writer.Write(", ");
                        enumerator.Current.Apply(this);
                    }
                }
            }

            _writer.Write(")");
        }
Beispiel #4
0
        static string[] GetParamNames(ConfigCommandMethod method)
        {
            var lookup = new Dictionary <string, List <int> >();

            for (var i = 0; i < method.Arguments.Count; i++)
            {
                var argument    = method.Arguments[i];
                var segmentName = argument.Segment.Name;

                var name = CamelCase(segmentName) + "Seg";

                if (!lookup.TryGetValue(name, out var list))
                {
                    list = new List <int>();
                    lookup.Add(name, list);
                }

                list.Add(i);
            }

            var result = new string[method.Arguments.Count];

            foreach (var pair in lookup)
            {
                if (pair.Value.Count == 1)
                {
                    result[pair.Value[0]] = pair.Key;
                }
                else
                {
                    for (var i = 0; i < pair.Value.Count; i++)
                    {
                        result[pair.Value[i]] = pair.Key + (i + 1);
                    }
                }
            }

            return(result);
        }