public virtual void Go()
        {
            var rows = Options.Rows;

            //no rows
            if (rows == null || rows.Length == 0 || Options.IgnoreRows)
            {
                try
                {
                    ShowStartTextInfo();
                    Go(String.Empty);
                }
                catch { throw; }
                finally
                {
                    ShowCompleteTextInfo();
                }
                return;
            }

            //has rows
            bool showProgress = (rows != null && rows.Length > 1);

            try
            {
                ShowStartTextInfo();

                if (showProgress)
                {
                    InitProgress(rows.Length);
                }

                for (int i = 0; i < rows.Length; i++)
                {
                    string fileName = PathUtils.GetFullFileName(rows, i, Options.SourceDir);
                    if (String.IsNullOrEmpty(fileName))
                    {
                        continue;
                    }

                    fileName = GetSourceFile(fileName);

                    SetStatusText(String.Format("Processing {0} ...", fileName));

                    if (Options.ShowFileNoTextInfo)
                    {
                        AppendTextInfo(String.Format("\r\nFile: {0}\r\n", i + 1));
                    }

                    Go(fileName);

                    //if (Options.ShowFileNoTextInfo)
                    //{
                    //AppendTextInfo("\r\n\r\n");
                    //}

                    if (showProgress)
                    {
                        SetProgress(i + 1);
                    }
                }
            }
            catch
            {
                throw;
            }
            finally
            {
                if (showProgress)
                {
                    ResetProgress();
                }
                ShowCompleteTextInfo();
            }
        }