internal static string AddOutputLineNumbers(string script)
        {
            var parser = new TextServices.ScriptParser();

            parser.Lex(script);
            var tokens = parser.GetTokens();

            // Replace method calls: Output() --> Output(<linenumber>)
            var methodCalls = tokens.FindMethodCall("Output", 0);     // Find all parameter-less calls to "Output"

            methodCalls.AddRange(tokens.FindMethodCall("Output", 1)); // Find all single-parameter calls to "Output";

            var sb  = new StringBuilder();
            var pos = 0;

            foreach (var call in methodCalls)
            {
                sb.Append(script.Substring(pos, call.StopToken.StartIndex - pos));
                if (call.ParamCount > 0)
                {
                    sb.Append(",");
                }
                sb.Append(call.StartToken.Line);

                pos = call.StopToken.StartIndex;
            }
            sb.Append(script.Substring(pos));
            return(sb.ToString());
        }
Exemple #2
0
        internal static string ReplaceGlobalMethodCalls(string script)
        {
            var parser = new TextServices.ScriptParser();

            parser.Lex(script);
            var tokens = parser.GetTokens();

            // Replace method calls: Output() --> Output(<linenumber>)
            var methodCalls = tokens.FindMethodCall();
            var sb          = new StringBuilder();
            var pos         = 0;

            foreach (var call in methodCalls.Where(t => ScriptMethods.ContainsKey(t.StartToken.Text)))
            {
                if (call.StartToken.TokenIndex == 0 || tokens[call.StartToken.TokenIndex - 1].Type != CSharpLexer.DOT)
                {
                    var method = ScriptMethods[call.StartToken.Text];

                    // Global method called directly:
                    sb.Append(script.Substring(pos, call.StartToken.StartIndex - pos));
                    sb.Append(method.DeclaringType.FullName);
                    sb.Append(".");

                    pos = call.StartToken.StartIndex;
                }
            }
            sb.Append(script.Substring(pos));
            return(sb.ToString());
        }
Exemple #3
0
        internal static string AddOutputLineNumbers(string script)
        {
            var parser = new TextServices.ScriptParser();

            parser.Lex(script);
            var tokens = parser.GetTokens();

            // Replace method calls: Output() --> Output(<linenumber>)
            var methodCalls = tokens.FindMethodCall("Output", 0);      // Find all parameter-less calls to "Output"

            methodCalls.AddRange(tokens.FindMethodCall("Output", 1));  // Find all single-parameter calls to "Output";
            methodCalls.AddRange(tokens.FindMethodCall("Info", 1));    // Find all single-parameter calls to "Info";
            methodCalls.AddRange(tokens.FindMethodCall("Warning", 1)); // Find all single-parameter calls to "Warning";
            methodCalls.AddRange(tokens.FindMethodCall("Error", 1));   // Find all single-parameter calls to "Error";

            // Build map of Custom Actions:
            var lines            = script.Split('\n').ToList();
            var customActionsMap = new List <int>();

            for (int i = 0; i < lines.Count; i++)
            {
                if (lines[i].StartsWith(CUSTOMACTIONS_CODEINDICATOR))
                {
                    customActionsMap.Add(i + 1);
                }
            }

            var sb  = new StringBuilder();
            var pos = 0;

            foreach (var call in methodCalls.OrderBy(n => n.StartToken.StartIndex))
            {
                int actionOffset = customActionsMap.LastOrDefault(c => c < call.StopToken.Line);
                sb.Append(script.Substring(pos, call.StopToken.StartIndex - pos));
                if (call.ParamCount > 0)
                {
                    sb.Append(",");
                }
                sb.Append(call.StartToken.Line - actionOffset);

                pos = call.StopToken.StartIndex;
            }
            sb.Append(script.Substring(pos));
            return(sb.ToString());
        }
        private static string AddOutputLineNumbers(string script)
        {
            var parser = new TextServices.ScriptParser();

            parser.Lex(script);
            var tokens = parser.GetTokens();

            // Replace method calls: Output() --> Output(<linenumber>)
            var methodCalls = tokens.FindMethodCall("Output", 0); // Find all parameter-less calls to "Output"
            var sb          = new StringBuilder();
            var pos         = 0;

            foreach (var call in methodCalls)
            {
                sb.Append(script.Substring(pos, call.StopIndex + 1 - pos));
                sb.Append("(" + (call.Line) + ")");
                pos = tokens[call.TokenIndex + 2].StartIndex + 1;
            }
            sb.Append(script.Substring(pos));
            return(sb.ToString());
        }