コード例 #1
0
ファイル: AnkhDiff.cs プロジェクト: necora/ank_git
        private string SubstituteArguments(string arguments, AnkhDiffToolArgs diffArgs, DiffToolMode toolMode)
        {
            if (diffArgs == null)
                throw new ArgumentNullException("diffArgs");

            if (_re == null)
            {
                const string ifBody = "\\?(?<tick>['\"])(?<ifbody>([^'\"]|('')|(\"\"))*)\\k<tick>";
                const string elseBody = "(:(?<tick2>['\"])(?<elsebody>([^'\"]|('')|(\"\"))*)\\k<tick2>)?";

                _re = new Regex(@"(\%(?<pc>[a-zA-Z0-9_]+)(\%|\b))|(\$\((?<vs>[a-zA-Z0-9_-]*)(\((?<arg>[a-zA-Z0-9_-]*)\))?\))" +
                "|(\\$\\((?<if>[a-zA-Z0-9_-]+)" + ifBody + elseBody + "\\))");
            }

            return _re.Replace(arguments, new Replacer(this, diffArgs, toolMode).Replace).TrimEnd();
        }
コード例 #2
0
ファイル: AnkhDiff.cs プロジェクト: necora/ank_git
            public Replacer(AnkhDiff context, AnkhDiffToolArgs args, DiffToolMode toolMode)
            {
                if (context == null)
                    throw new ArgumentNullException("context");
                else if (args == null)
                    throw new ArgumentNullException("args");

                _context = context;
                _toolArgs = args;
                _diffArgs = args as AnkhDiffArgs;
                _mergeArgs = args as AnkhMergeArgs;
                _patchArgs = args as AnkhPatchArgs;
                _toolMode = toolMode;
            }
コード例 #3
0
ファイル: AnkhDiff.cs プロジェクト: necora/ank_git
        private bool Substitute(string reference, AnkhDiffToolArgs args, DiffToolMode toolMode, out string program, out string arguments)
        {
            if (string.IsNullOrEmpty(reference))
                throw new ArgumentNullException("reference");
            else if (args == null)
                throw new ArgumentNullException("args");

            // Ok: We received a string with a program and arguments and windows
            // wants a program and arguments separated. Let's find the program before substituting

            reference = reference.TrimStart();

            program = null;
            arguments = null;

            string app;
            if (!string.IsNullOrEmpty(app = AnkhDiffTool.GetToolNameFromTemplate(reference)))
            {
                // We have a predefined template. Just use it
                AnkhDiffTool tool = GetAppItem(app, toolMode);

                if (tool == null)
                    return false;
                else if (!tool.IsAvailable)
                    return false;

                program = SubstituteArguments(tool.Program, args, toolMode);
                arguments = SubstituteArguments(tool.Arguments, args, toolMode);

                return !String.IsNullOrEmpty(program) && File.Exists(program);
            }
            else if (!TrySplitPath(reference, out program, out arguments))
                return false;

            program = SubstituteArguments(program, args, toolMode);
            arguments = SubstituteArguments(arguments, args, toolMode);

            return true;
        }