static int Main(string[] args) { var sources = new List <System.IO.TextReader>(); var benchmark = false; var benchmarkIterations = 20; var target = Console.Out; var runPerlTests = false; var settings = CommonMarkSettings.Default.Clone(); var useFatHtmlFormatter = false; Dictionary <string, string> placeholderSubstitutionTable = null; try { for (var i = 0; i < args.Length; i++) { if (string.Equals(args[i], "--version", StringComparison.OrdinalIgnoreCase)) { Console.WriteLine("CommonMark.NET {0}", CommonMarkConverter.Version); Console.WriteLine(" - (c) 2014-2016 Kārlis Gaņģis"); return(0); } else if ((string.Equals(args[i], "--help", StringComparison.OrdinalIgnoreCase)) || (string.Equals(args[i], "-h", StringComparison.OrdinalIgnoreCase))) { PrintUsage(); return(0); } else if (string.Equals(args[i], "--perltest", StringComparison.OrdinalIgnoreCase)) { runPerlTests = true; } else if (string.Equals(args[i], "--ast", StringComparison.OrdinalIgnoreCase)) { settings.OutputFormat = OutputFormat.SyntaxTree; } else if (string.Equals(args[i], "--extended", StringComparison.OrdinalIgnoreCase)) { settings.AdditionalFeatures = CommonMarkAdditionalFeatures.All; useFatHtmlFormatter = true; } else if (string.Equals(args[i], "--subst", StringComparison.OrdinalIgnoreCase)) { if (i != args.Length - 1) { var tokens = args[i + 1].Split(':'); if (tokens.Length % 2 == 0) { if (placeholderSubstitutionTable == null) { placeholderSubstitutionTable = new Dictionary <string, string>(); } for (int tokenIndex = 0; tokenIndex < tokens.Length; tokenIndex += 2) { placeholderSubstitutionTable[tokens[tokenIndex]] = tokens[tokenIndex + 1]; } i++; } else { Console.WriteLine("Substitution strings were not provided in pairs."); PrintUsage("--subst"); return(1); } } else { PrintUsage("--subst"); return(1); } } else if (string.Equals(args[i], "--sourcepos", StringComparison.OrdinalIgnoreCase)) { settings.TrackSourcePosition = true; } else if (string.Equals(args[i], "--bench", StringComparison.OrdinalIgnoreCase)) { benchmark = true; if (i != args.Length - 1) { if (!int.TryParse(args[i + 1], System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out benchmarkIterations)) { benchmarkIterations = 20; } else { i++; } } } else if (string.Equals(args[i], "--out", StringComparison.OrdinalIgnoreCase)) { if (i == args.Length - 1 || args[i + 1].StartsWith("-")) { PrintUsage(); return(1); } i++; target = new System.IO.StreamWriter(args[i]); } else if (args[i].StartsWith("-")) { PrintUsage(args[i]); return(1); } else { // treat as file argument sources.Add(new System.IO.StreamReader(args[i])); } } if (sources.Count == 0) { if (runPerlTests) { Console.InputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8; // runtests.pl writes directly to STDIN but will not send Ctrl+C and also // will get confused by the additional information written to STDOUT var sb = new StringBuilder(); while (Console.In.Peek() != -1) { sb.AppendLine(Console.In.ReadLine()); } sources.Add(new System.IO.StringReader(sb.ToString())); } else if (!Console.IsInputRedirected) { Console.InputEncoding = Encoding.Unicode; Console.OutputEncoding = Encoding.Unicode; Console.WriteLine("Enter the source. Press Enter after the last line and" + Environment.NewLine + "then press Ctrl+C to run parser."); Console.WriteLine(); Console.CancelKeyPress += (s, a) => { a.Cancel = true; Console.WriteLine("Output:"); Console.WriteLine(); }; sources.Add(Console.In); } else { Console.InputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8; sources.Add(Console.In); } } if (useFatHtmlFormatter) { settings.OutputFormat = OutputFormat.CustomDelegate; settings.OutputDelegate = (block, writer, cmSettings) => { var formatter = new Formatters.HtmlFormatter(writer, cmSettings); if (placeholderSubstitutionTable != null) { formatter.PlaceholderResolver = placeholderText => { string result; placeholderSubstitutionTable.TryGetValue(placeholderText, out result); return(result); }; } formatter.WriteDocument(block); }; } if (benchmark) { Console.WriteLine("Running the benchmark..."); foreach (var source in sources) { // by using a in-memory source, the disparity of results is reduced. var data = source.ReadToEnd(); // in-memory source that gets reused further reduces the disparity. var builder = new StringBuilder(2 * 1024 * 1024); var sw = new System.Diagnostics.Stopwatch(); var mem = GC.GetTotalMemory(true); long mem2 = 0; for (var x = -1 - benchmarkIterations / 10; x < benchmarkIterations; x++) { if (x == 0) { sw.Start(); } builder.Length = 0; using (var reader = new System.IO.StringReader(data)) using (var twriter = new System.IO.StringWriter(builder)) CommonMarkConverter.Convert(reader, twriter, settings); if (mem2 == 0) { mem2 = GC.GetTotalMemory(false); } GC.Collect(); } sw.Stop(); target.WriteLine("Time spent: {0:0.#}ms Approximate memory usage: {1:0.000}MB", (decimal)sw.ElapsedMilliseconds / benchmarkIterations, (mem2 - mem) / 1024M / 1024M); } } else { foreach (var source in sources) { CommonMarkConverter.Convert(source, target, settings); } } if (System.Diagnostics.Debugger.IsAttached) { Console.WriteLine("Press any key to continue..."); Console.ReadKey(true); } return(0); } catch (Exception ex) { Console.Error.WriteLine(ex.ToString()); return(-1); } finally { foreach (var s in sources) { if (s != Console.In) { s.Close(); } } if (target != Console.Out) { target.Close(); } } }
private void ExecuteRefreshCommandInternal() { DocumentationHtmlContent = null; IUttBaseScriptItem scriptItem = (ProjectService.CurrentProject as VuGenProject)?.Script; var actionFilePaths = new List<string>(); Factotum.ProcessRecursively( scriptItem, item => //// ReSharper disable once RedundantEnumerableCastCall - False detection (item as IUttCollectionScriptItem<IUttBaseScriptItem>)?.ScriptItems ?? (item as IUttCollectionScriptItem<IActionScriptItem>)?.ScriptItems .Cast<IUttBaseScriptItem>(), item => { var actionScriptItem = item as IActionScriptItem; if (actionScriptItem != null) { actionFilePaths.Add(actionScriptItem.FullFileName); } }); var parsedFiles = Parser.ParseFiles(actionFilePaths); var content = parsedFiles .SelectMany(obj => obj.Elements) .OfType<ParsedComment>() .Select(obj => obj.Content) .Join(Environment.NewLine + Environment.NewLine); var settings = CommonMarkSettings.Default.Clone(); settings.AdditionalFeatures = CommonMarkAdditionalFeatures.All; settings.RenderSoftLineBreaksAsLineBreaks = true; var document = CommonMarkConverter.Parse(content, settings); ////var htmlContent = CommonMarkConverter.Convert(content, settings); ////Trace.WriteLine(htmlContent); using (var stringWriter = new StringWriter()) { var formatter = new HtmlFormatter(stringWriter, settings); formatter.WriteDocument(document); DocumentationHtmlContent = stringWriter.ToString(); } }