public static IEnumerable<MethodCall> Parse(string code)
        {
            foreach (var match in MethodCallRegex.Matches(code).OfType<Match>())
            {
                var openBracketIndex = match.Groups["open"].Index;
                var parameters = new StringBuilder();
                var innerStructures = new InnerStructures.InnerStructures();
                int j;
                for (j = openBracketIndex; j < code.Length; j++)
                {
                    innerStructures.Handle(code[j]);
                    parameters.Append(code[j]);

                    if (!innerStructures.IsInsideSomeStructure)
                        break;
                }

                var parametersString = parameters.ToString();
                var parametersStringWithoutSurroundingBrackets = parametersString.Substring(1, parametersString.Length - 2);
                var parametersCollection = parametersStringWithoutSurroundingBrackets.SplitByComma().ToArray();

                var methodName = match.Groups["name"].Value;
                var originalText = code.SafeSubstring(match.Index, j - match.Index + 1);
                var methodCall = new MethodCall(methodName, parametersCollection, originalText);

                yield return methodCall;
            }
        }
Exemple #2
0
        private static void HandleIndexStyles(MethodCall[] methodCalls, Algo algo, ParsingErrors parsingErrors)
        {
            var setIndexStyleCalls = methodCalls.Where(call => call.MethodName == "SetIndexStyle");
            var indexesStyles = new Dictionary<int, DrawingShapeStyle>();
            foreach (var methodCall in setIndexStyleCalls)
            {
                int index;
                if (!int.TryParse(methodCall.Parameters[0], out index))
                {
                    parsingErrors.Add(ErrorType.NotSupportedWarning, "SetIndexStyle", "Can't cast to int: " + methodCall.Parameters[0]);
                    continue;
                }
                var drawingShapeStyle = methodCall.Parameters[1].ToDrawingShapeStyle();
                indexesStyles[index] = drawingShapeStyle;

                if (methodCall.Parameters.Length >= 4)
                {
                    int width;
                    if (int.TryParse(methodCall.Parameters[3], out width))
                        algo.Widths[index] = width;
                }
            }
            foreach (var keyValuePair in indexesStyles)
            {
                algo.Styles[keyValuePair.Key] = keyValuePair.Value;
            }
        }