Esempio n. 1
0
        /// <summary>
        /// This method checks if help output is requested or required.
        /// Help can be called explicitly or if a user uses JsMrg without
        /// params.
        /// </summary>
        private CheckResult HelpCheck(out List <TerminalMessage> messages, bool force = false)
        {
            var helpCheck       = new HelpCheck();
            var helpCheckResult = helpCheck.Run(Args);

            // Will be passed through empty if help is not applied.
            messages = new List <TerminalMessage>();
            var initialMessagesWLicense = TerminalMessages.InitialMessagesWLicense1
                                          .Concat(TerminalMessages.InitialMessagesWLicense2).ToArray();

            foreach (var message in initialMessagesWLicense)
            {
                messages.Add(TerminalMessage.Create(message));
            }

            if (force || helpCheckResult.CheckResult == CheckResult.Apply)
            {
                foreach (var message in TerminalMessages.Help)
                {
                    messages.Add(TerminalMessage.Create(message));
                }

                return(CheckResult.Apply);
            }

            return(CheckResult.Ignore);
        }
Esempio n. 2
0
        public bool Run(string inputFile, string outputFile, out List <TerminalMessage> messages)
        {
            messages = new List <TerminalMessage>();

            EnvironmentPath      = IoHelper.GetEnvironmentPath();
            ResultingFileContent = File.ReadAllText(inputFile);
            OperatedFile         = inputFile;

            var regex   = new Regex(@"/\*\*(jsmrg)(?:(?!\*/).)*\*/", RegexOptions.Singleline);
            var matches = regex.Matches(ResultingFileContent);

            var operationResult = OperateMatches(messages, matches);

            messages = operationResult.Messages;

            if (operationResult.IsOk)
            {
                if (IoHelper.WriteOutputFile(outputFile, ResultingFileContent))
                {
                    messages.Add(TerminalMessage.Create($"JsMrg successful.", Color.DarkGreen));
                    messages.Add(TerminalMessage.LineBreak());
                }
                else
                {
                    messages.Add(TerminalMessage.Create($"JsMrg complete, but failed to write output file {outputFile}.", Color.Red));

                    // Last operation failed, so overwrite IsOk:
                    operationResult.IsOk = false;
                }
            }

            return(operationResult.IsOk);
        }
Esempio n. 3
0
        private OperateMatchesResult OperateMatches(List <TerminalMessage> messages, MatchCollection matches)
        {
            var error                = false;
            var matchOperator        = new MatchOperator();
            var latestMatchValue     = string.Empty;
            var resultingFileContent = ResultingFileContent;

            try
            {
                foreach (Match match in matches)
                {
                    var inspection = matchOperator.Operate(match);
                    latestMatchValue = inspection.Match.Value;
                    switch (inspection.Command)
                    {
                    case MatchInspectionType.Include:
                        resultingFileContent = Include(inspection, resultingFileContent);
                        break;

                    case MatchInspectionType.HtmlVar:
                        resultingFileContent = HtmlVar(inspection, resultingFileContent);
                        break;

                    case MatchInspectionType.Error:
                        messages.Add(TerminalMessage.Create(string.Format(TerminalMessages.StoppingJsMrgRunner, match.Value), Color.Red));
                        error = true;
                        break;
                    }
                }
            }
            catch (JsMrgRunnerException jsMrgRunnerException)
            {
                messages.Add(TerminalMessage.Create(string.Format(jsMrgRunnerException.Message, jsMrgRunnerException.Message), Color.Red));
                error = true;
            }
            catch (Exception)
            {
                messages.Add(TerminalMessage.Create(string.Format(TerminalMessages.UnexpectedExceptionWhileJsMrgRunner, latestMatchValue), Color.Red));
                error = true;
            }

            if (false == error)
            {
                ResultingFileContent = resultingFileContent;
            }

            return(new OperateMatchesResult()
            {
                Messages = messages,
                IsOk = false == error
            });
        }
Esempio n. 4
0
        /// <summary>
        /// Runs JsMrg.
        /// </summary>
        public ProgramRunnerExit Run()
        {
            var helpCheck = false;
            List <TerminalMessage> helpMessages = new List <TerminalMessage>();

            if (0 == Args.Length)
            {
                helpCheck = true;
                HelpCheck(out helpMessages, true);
            }

            if (helpCheck || CheckResult.Apply == HelpCheck(out helpMessages))
            {
                TerminalWriter.WriteTerminalMessages(helpMessages);

                return(ProgramRunnerExit.Help);
            }

            OutputStartupMessages();

            // If help is not requested, we are expecting exactly two parameters.
            if (2 != Args.Length)
            {
                var tm = TerminalMessage.Create(TerminalMessages.UnexpectedNumberOfParams, Color.Red);
                TerminalWriter.WriteTerminalMessage(tm);

                return(ProgramRunnerExit.Error);
            }

            InputFile  = Args[0];
            InputFile  = IoHelper.OptionalAdjustmentToAbsolutPath(InputFile);
            OutputFile = Args[1];

            if (CheckResult.Ok != IoCheck(out var terminalMessages))
            {
                TerminalWriter.WriteTerminalMessages(terminalMessages);

                // Bail out, we are not ready to run.
                return(ProgramRunnerExit.IoCheckOut);
            }

            var jsMrgRunner = new JsMrgRunner();
            var runResult   = jsMrgRunner.Run(InputFile, OutputFile, out var combinedRunMessages);
            var runExit     = ProgramRunnerExit.Done;

            if (false == runResult)
            {
                var tm = TerminalMessage.Create(TerminalMessages.JsMrgRunEndedWErrors, Color.Red);
                TerminalWriter.WriteTerminalMessage(tm);

                runExit = ProgramRunnerExit.Error;
            }

            TerminalWriter.WriteTerminalMessages(combinedRunMessages);
            if (runExit == ProgramRunnerExit.Done)
            {
                JsMrgOutput = jsMrgRunner.ResultingFileContent;
            }

            return(runExit);
        }