BlueSky.SyntaxEditorWindow.SplitBSkyFormat C# (CSharp) Метод

SplitBSkyFormat() приватный Метод

private SplitBSkyFormat ( string command, string &sub, string &varname, string &BSkyLeftVar ) : void
command string
sub string
varname string
BSkyLeftVar string
Результат void
        private void SplitBSkyFormat(string command, out string sub, out string varname, out string BSkyLeftVar)
        {
            /// patterns is like: "BSkyFormat(var.name <- func.name("
            string pattern = @"BSkyFormat\(\s*[A-Za-z0-9_\.]+\s*(<-|=)\s*[A-Za-z0-9_\.]+\(";
            int firstindex = command.IndexOf('(');
            int lastindex = command.LastIndexOf(')');
            sub = "";
            varname = "";
            BSkyLeftVar = "";

            if (firstindex == -1 || lastindex == -1)//21May2014 This check is important to stop app crash.
            {
                return;
            }

            #region Finding what's passed in 'BSkyFormat(param)' as parameter.
            sub = command.Substring(firstindex + 1, lastindex - firstindex - 1);
            /// sub can be one of :
            /// sub = df
            /// sub = df <- data.frame(...)
            /// sub = data.frame(...)
            #endregion

            #region Finding Leftvar in Leftvar <- BSkyFormat
            ///See if BSkyFormat is assigned to any leftvar. eg.. leftvar <- BSkyFormat(....)
            int assignmentIndex, BSkyIndex;
            BSkyLeftVar = "";
            BSkyIndex = command.Trim().IndexOf("BSkyFormat");
            assignmentIndex = command.Trim().LastIndexOf("<-", BSkyIndex);
            if (assignmentIndex < 0)//arrow is not there
            {
                assignmentIndex = command.Trim().LastIndexOf("=", BSkyIndex);
            }
            if (assignmentIndex > 0)//<- or = before BSkyFormat found. ie. leftvar <- BskyFromat
            {
                ///find 'leftvar' name now
                BSkyLeftVar = command.Trim().Substring(0, assignmentIndex).Trim();
            }
            #endregion

            #region Finding varname in BSkyFormat(varname <- data.frame(...) )
            /// looking for parameter of type df <- data.frame(...)
            bool str = Regex.IsMatch(command, pattern);
            MatchCollection mc = Regex.Matches(command, pattern);


            int asnmntindex = 0;
            if (str)
            {
                asnmntindex = sub.IndexOf("<-");
                if (asnmntindex < 0)
                {
                    asnmntindex = sub.IndexOf('=');
                }
                varname = sub.Substring(0, asnmntindex);
            }
            else // for BSkyFormat(m) then varname = m 
            {
                pattern = @"\s*\G[A-Za-z0-9_\.]+\s*[^\(\)\:,;=]?";
                str = Regex.IsMatch(sub, pattern);
                mc = Regex.Matches(sub, pattern);
                if (str && mc.Count == 1 && (sub.Trim().Length == mc[0].ToString().Trim().Length))
                {
                    varname = mc[0].ToString();
                }
            }
            #endregion
            varname = varname.Trim();//01Jul2013
            return;

        }
SyntaxEditorWindow