/// <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); }
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); }
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 }); }
/// <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); }