예제 #1
0
        protected string StSolution(IPM pm)
        {
            if (!pm.Is(LevelType.Property, "solution"))
            {
                throw new IncorrectNodeException(pm);
            }

            // solution.current.
            if (pm.Is(1, LevelType.Property, "current"))
            {
                if (!env.IsOpenedSolution)
                {
                    throw new NotSupportedOperationException("Property 'current' is not available. Open the Solution or use 'path()' method instead.");
                }
                return(StSlnPMap(env.SolutionFile, pm.PinTo(2)));
            }

            // solution.path("file").
            if (pm.Is(1, LevelType.Method, "path"))
            {
                ILevel lvlPath = pm.Levels[1];
                lvlPath.Is("solution.path(string sln)", ArgumentType.StringDouble);
                return(StSlnPMap((string)lvlPath.Args[0].data, pm.PinTo(2)));
            }

            throw new IncorrectNodeException(pm, 1);
        }
예제 #2
0
        protected string DeleteFiles(ILevel level, IPM pm)
        {
            if (level.Is(ArgumentType.Object))
            {
                return(DeleteFiles(pm.PinTo(1), (RArgs)level.Args[0].data));
            }
            if (level.Is(ArgumentType.Object, ArgumentType.Object))
            {
                return(DeleteFiles(pm.PinTo(1), (RArgs)level.Args[0].data, (RArgs)level.Args[1].data));
            }

            throw new PMLevelException(level, "delete.files(object files [, object except])");
        }
예제 #3
0
        protected string CopyDirectory(ILevel level, IPM pm)
        {
            if (level.Is(ArgumentType.StringDouble, ArgumentType.StringDouble, ArgumentType.Boolean))
            {
                return(CopyDirectory(pm.PinTo(1), (string)level.Args[0].data, (string)level.Args[1].data, (bool)level.Args[2].data));
            }
            if (level.Is(ArgumentType.StringDouble, ArgumentType.StringDouble, ArgumentType.Boolean, ArgumentType.Boolean))
            {
                return(CopyDirectory(pm.PinTo(1), (string)level.Args[0].data, (string)level.Args[1].data, (bool)level.Args[2].data, (bool)level.Args[3].data));
            }

            throw new PMLevelException(level, "copy.directory(string src, string dest, bool force [, bool overwrite])");
        }
예제 #4
0
        protected string DataClone(ILevel level, IPM pm)
        {
            if (level.Is(ArgumentType.StringDouble, ArgumentType.Integer))
            {
                return(DataClone(pm.PinTo(1), (string)level.Args[0].data, (int)level.Args[1].data));
            }

            if (level.Is(ArgumentType.StringDouble, ArgumentType.Integer, ArgumentType.Boolean))
            {
                return(DataClone(pm.PinTo(1), (string)level.Args[0].data, (int)level.Args[1].data, (bool)level.Args[2].data));
            }

            throw new PMLevelException(level, "data.clone(string name, integer count [, boolean forceEval])");
        }
예제 #5
0
        protected string stEvents(IPM pm)
        {
            if (!pm.Is(LevelType.Property, "events"))
            {
                throw new IncorrectNodeException(pm);
            }

            ILevel etype = pm.Levels[1];

            if (etype.Type != LevelType.Property)
            {
                throw new IncorrectNodeException(pm, 1);
            }

            if (pm.Is(2, LevelType.Method, "item"))
            {
                SolutionEventType type;
                try {
                    type = (SolutionEventType)Enum.Parse(typeof(SolutionEventType), etype.Data);
                }
                catch (ArgumentException) {
                    throw new OperandNotFoundException(etype.Data);
                }
                return(stEventItem(type, pm.PinTo(2)));
            }

            throw new IncorrectNodeException(pm, 2);
        }
예제 #6
0
        protected string stEventItem(SolutionEventType type, IPM pm)
        {
            ILevel level = pm.FirstLevel;

            int            index = -1;
            ISolutionEvent evt;

            if (level.Is(ArgumentType.StringDouble))
            {
                evt = getEventByName(type, (string)level.Args[0].data, out index);
            }
            else if (level.Is(ArgumentType.Integer))
            {
                index = (int)level.Args[0].data;
                evt   = getEventByIndex(type, index);
            }
            else
            {
                throw new PMLevelException(level, "`item( string name | integer index )`");
            }

            // .item(...).

            if (pm.Is(1, LevelType.Property, "Enabled"))
            {
                return(pEnabled(evt, pm.PinTo(2)));
            }
            if (pm.Is(1, LevelType.Method, "run"))
            {
                return(mActionRun(type, evt, pm.PinTo(1)));
            }
            if (pm.Is(1, LevelType.Property, "Status"))
            {
                return(itemStatus(type, index, pm.PinTo(1)));
            }
            if (pm.Is(1, LevelType.Property, "stdout"))
            {
                return(pStdout(evt, pm.PinTo(2)));
            }
            if (pm.Is(1, LevelType.Property, "stderr"))
            {
                return(pStderr(evt, pm.PinTo(2)));
            }

            throw new IncorrectNodeException(pm, 1);
        }
예제 #7
0
        protected string DeleteDirectory(ILevel level, IPM pm)
        {
            if (level.Is(ArgumentType.StringDouble, ArgumentType.Boolean))
            {
                return(DeleteDirectory(pm.PinTo(1), (string)level.Args[0].data, (bool)level.Args[1].data));
            }

            throw new PMLevelException(level, "delete.directory(string dir, bool force)");
        }
예제 #8
0
        protected string DataGet(ILevel level, IPM pm)
        {
            if (level.Is(ArgumentType.StringDouble, ArgumentType.Boolean))
            {
                return(DataGet(pm.PinTo(1), (string)level.Args[0].data, (bool)level.Args[1].data));
            }

            throw new PMLevelException(level, "data.get(string name, boolean forceEval)");
        }
예제 #9
0
        protected string DataFree(ILevel level, IPM pm)
        {
            if (level.Is(ArgumentType.StringDouble))
            {
                return(DataFree(pm.PinTo(1), (string)level.Args[0].data));
            }

            throw new PMLevelException(level, "data.free(string name)");
        }
예제 #10
0
        protected string StSlnPMap(string sln, IPM pm)
        {
            if (string.IsNullOrWhiteSpace(sln))
            {
                throw new ArgumentException($"Failed {nameof(StSlnPMap)}: sln is empty");
            }
            ProjectsMap map = GetProjectsMap(sln);

            if (pm.Is(LevelType.Property, "First"))
            {
                return(UseProjectsMap(map.FirstBy(env.IsCleanOperation), pm.PinTo(1)));
            }

            if (pm.Is(LevelType.Property, "Last"))
            {
                return(UseProjectsMap(map.LastBy(env.IsCleanOperation), pm.PinTo(1)));
            }

            if (pm.Is(LevelType.Property, "FirstRaw"))
            {
                return(UseProjectsMap(map.First, pm.PinTo(1)));
            }

            if (pm.Is(LevelType.Property, "LastRaw"))
            {
                return(UseProjectsMap(map.Last, pm.PinTo(1)));
            }

            if (pm.FinalEmptyIs(LevelType.Property, "GuidList"))
            {
                return(Value.From(map.GuidList));
            }

            if (pm.Is(LevelType.Method, "projectBy"))
            {
                ILevel lvlPrjBy = pm.FirstLevel;
                lvlPrjBy.Is("projectBy(string guid)", ArgumentType.StringDouble);
                return(UseProjectsMap(map.GetProjectBy((string)lvlPrjBy.Args[0].data), pm.PinTo(1)));
            }

            throw new IncorrectNodeException(pm);
        }
예제 #11
0
        protected string CopyFile(ILevel level, IPM pm)
        {
            if (level.Is(ArgumentType.StringDouble, ArgumentType.StringDouble, ArgumentType.Boolean))
            {
                return(CopyFile(pm.PinTo(1), (string)level.Args[0].data, (string)level.Args[1].data, (bool)level.Args[2].data));
            }
            if (level.Is(ArgumentType.StringDouble, ArgumentType.StringDouble, ArgumentType.Boolean, ArgumentType.Object))
            {
                return(CopyFile(pm.PinTo(1), (string)level.Args[0].data, (string)level.Args[1].data, (bool)level.Args[2].data, (RArgs)level.Args[3].data));
            }
            if (level.Is(ArgumentType.Object, ArgumentType.StringDouble, ArgumentType.Boolean))
            {
                return(CopyFile(pm.PinTo(1), (RArgs)level.Args[0].data, (string)level.Args[1].data, (bool)level.Args[2].data));
            }
            if (level.Is(ArgumentType.Object, ArgumentType.StringDouble, ArgumentType.Boolean, ArgumentType.Object))
            {
                return(CopyFile(pm.PinTo(1), (RArgs)level.Args[0].data, (string)level.Args[1].data, (bool)level.Args[2].data, (RArgs)level.Args[3].data));
            }

            throw new PMLevelException(level, "copy.file((string src | object srclist), string dest, bool overwrite [, object except])");
        }
예제 #12
0
        protected string StProjectsFind(IPM pm)
        {
            ILevel level = pm.FirstLevel; // level of the `find` property

            if (level.Is(ArgumentType.StringDouble))
            {
                string name = (string)level.Args[0].data;
                return(ProjectCfg(name, pm.PinTo(1)));
            }

            throw new PMLevelException(level, "find(string name)");
        }
예제 #13
0
        protected string StItem(IPM pm)
        {
            if (!pm.Is(LevelType.Method, "item"))
            {
                throw new IncorrectNodeException(pm);
            }
            ILevel level = pm.FirstLevel; // level of the item() method

            if (!level.Is(ArgumentType.StringDouble))
            {
                throw new PMLevelException(level, "item(string name)");
            }
            string name = (string)level.Args[0].data;

            if (string.IsNullOrWhiteSpace(name)
                /*|| name.Trim().Equals(Settings.OWP_ITEM_VSSBE, StringComparison.OrdinalIgnoreCase)*/)
            {
                throw new NotSupportedOperationException($"The OW pane '{name}' is not supported for current operation.");
            }

            pm.PinTo(1);
            switch (pm.FirstLevel.Data)
            {
            case "write": {
                return(StItemWrite(name, false, pm));
            }

            case "writeLine": {
                return(StItemWrite(name, true, pm));
            }

            case "delete": {
                return(StItemDelete(name, pm));
            }

            case "clear": {
                return(StItemClear(name, pm));
            }

            case "activate": {
                return(StItemActivate(name, pm));
            }
            }

            throw new IncorrectNodeException(pm);
        }