public void Dispose() { if (Control != null) Control.Dispose(); _htmlDocument = null; _pipeline = null; }
public BlogController(IFileSystemService fileSystem, IConfiguration configuration) { _fileSystem = fileSystem; Configuration = configuration; MarkdownPipeline = new MarkdownPipelineBuilder() .UseSoftlineBreakAsHardlineBreak() .UseAdvancedExtensions() .Build(); }
public Browser(string file) { var builder = new MarkdownPipelineBuilder() .UsePragmaLines() .UseAdvancedExtensions(); _pipeline = builder.Build(); _zoomFactor = GetZoomFactor(); _file = file; _htmlTemplate = GetHtmlTemplate(); _currentViewLine = -1; InitBrowser(); }
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) { ReceivedSetup = true; }
public HtmlInclusionInlineRenderer(MarkdownContext context, MarkdownPipeline inlinePipeline) { _context = context; _inlinePipeline = inlinePipeline; }
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) { // Nothing to setup, JiraLinks used a normal LinkInlineRenderer }
public DocumentationService(ILogger <DocumentationService> logger, IOptions <LiveDocsOptions> options, IWebHostEnvironment hostingEnvironment, MarkdownPipeline markdownPipeline) { _Logger = logger; _Options = options.Value; _HostingEnvironment = hostingEnvironment; _MarkdownPipeline = markdownPipeline; }
public static MarkdownPipeline GetMarkdownPipeline() { // .UseAutoIdentifiers() return(_sMarkdownPipeline ?? (_sMarkdownPipeline = new MarkdownPipelineBuilder().UsePipeTables().UseCustomContainers().UseEmphasisExtras().UseAutoLinks().UseGenericAttributes().Build())); }
/// <summary> /// Start the preview on the Control. /// </summary> /// <param name="dataSource">Path to the file.</param> public override void DoPreview <T>(T dataSource) { this.infoBarDisplayed = false; try { if (!(dataSource is string filePath)) { throw new ArgumentException($"{nameof(dataSource)} for {nameof(MarkdownPreviewHandler)} must be a string but was a '{typeof(T)}'"); } string fileText = File.ReadAllText(filePath); Regex imageTagRegex = new Regex(@"<[ ]*img.*>"); if (imageTagRegex.IsMatch(fileText)) { this.infoBarDisplayed = true; } this.extension.BaseUrl = Path.GetDirectoryName(filePath); MarkdownPipeline pipeline = this.pipelineBuilder.Build(); string parsedMarkdown = Markdown.ToHtml(fileText, pipeline); string markdownHTML = $"{this.htmlHeader}{parsedMarkdown}{this.htmlFooter}"; this.InvokeOnControlThread(() => { this.browser = new WebBrowserExt { DocumentText = markdownHTML, Dock = DockStyle.Fill, IsWebBrowserContextMenuEnabled = false, ScriptErrorsSuppressed = true, ScrollBarsEnabled = true, AllowNavigation = false, }; this.Controls.Add(this.browser); if (this.infoBarDisplayed) { this.infoBar = this.GetTextBoxControl(Resources.BlockedImageInfoText); this.Resize += this.FormResized; this.Controls.Add(this.infoBar); } }); MarkdownTelemetry.Log.MarkdownFilePreviewed(); } catch (Exception e) { MarkdownTelemetry.Log.MarkdownFilePreviewError(e.Message); this.InvokeOnControlThread(() => { this.Controls.Clear(); this.infoBarDisplayed = true; this.infoBar = this.GetTextBoxControl(Resources.MarkdownNotPreviewedError); this.Resize += this.FormResized; this.Controls.Add(this.infoBar); }); } finally { base.DoPreview(dataSource); } }
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) { renderer.ObjectRenderers.Replace <CodeBlockRenderer>(new HighlightCodeBlockRenderer()); }
public static void AssertNormalize(string input, string expected = null, bool trim = true, NormalizeOptions options = null, MarkdownPipeline pipeline = null) { expected = expected ?? input; input = NormText(input, trim); expected = NormText(expected, trim); pipeline = pipeline ?? new MarkdownPipelineBuilder() .UseAutoLinks() .UseJiraLinks(new Extensions.JiraLinks.JiraLinkOptions("https://jira.example.com")) .UseTaskLists() .Build(); var result = Markdown.Normalize(input, options, pipeline: pipeline); result = NormText(result, trim); TestParser.PrintAssertExpected(input, result, expected); }
public ScriptCsRenderer(ScriptExecutor scriptExecutor, MarkdownPipeline pipeline, ScriptCsOptions options) { this.scriptExecutor = scriptExecutor; this.pipeline = pipeline; this.options = options; }
public MdContentParser() { // Configure the pipeline with all advanced extensions active //except (except Emoji, SoftLine as HarLine and SmartyPants) this.pipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build(); }
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) { }
private static void File(string fullFilePath, Container container, RenderSettings settings) { string body = null; string summaries = null; string cssHeader = null; string jsHeader = null; var sourceFolder = new AbsoluteFolder(Path.GetDirectoryName(fullFilePath)); if (settings == null) { settings = RenderSettings.DefaultWiki(sourceFolder); } using (var scope = ThreadScopedLifestyle.BeginScope(container)) using (var writer = new StringWriter()) { MarkdownPipeline pipeline = CreatePipeline(container); var markdown = System.IO.File.ReadAllText(fullFilePath); var markdownDocument = Markdown.Parse(markdown, pipeline); var renderer = new ExtensionHtmlRenderer(writer, markdownDocument, settings, pipeline); renderer.RegisterDynamicCss(new Code("markdown-extensions", "0.0.1", () => Assembly.GetExecutingAssembly().GetFileContent("vscode-markdown.css"))); pipeline.Setup(renderer); RegisterBlocks(renderer); renderer.Parse(container); renderer.Validate(container); renderer.Transform(); renderer.Render(markdownDocument); var fileName = Path.GetFileName(fullFilePath); renderer.RenderMarkdown(fileName, markdownDocument); writer.Flush(); body = writer.ToString(); using (var summaryWriter = new StringWriter()) { // a bit of a hack to use different writer for summaries renderer.Writer = summaryWriter; renderer.RenderSummaries(markdownDocument); summaryWriter.Flush(); summaries = summaryWriter.ToString(); } cssHeader = renderer.RenderCssHeader(); jsHeader = renderer.RenderJavascriptHeader(); } var document = $@" <html> <head> {jsHeader} {cssHeader} </head> <body> {summaries} <main> {body} </main> </body> </html>" ; string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fullFilePath); var file = new File(settings.OutputFolder, fileNameWithoutExtension + ".html"); System.IO.File.WriteAllText(file.AbsolutePath, document); }
protected static PPTXDocument ToPPTxDocument(string markdown, PPTXSetting options = null, MarkdownPipeline pipeline = null) { options = options ?? new PPTXSetting() { SlideSize = EPPTXSlideSizeValues.Screen4x3 }; pipeline = pipeline ?? new MarkdownPipelineBuilder() .UsePipeTables() .UseEmphasisExtras() .Build(); var document = Markdig.Markdown.Parse(markdown, pipeline); var pptx = new PPTXDocument(); var slide = new SlideManager(pptx, options); var renderer = new PPTXRenderer(slide, options); pipeline.Setup(renderer); renderer.Render(document); slide.EndSheet(); return(pptx); }
/// <summary> /// Initializes a new instance of the <see cref="JupyterParser" /> class. /// </summary> /// <param name="text">The reader.</param /// <param name="pipeline">The pipeline.</param> /// <exception cref="ArgumentNullException"> /// </exception> public JupyterParser(string text, MarkdownPipeline pipeline) { _text = text; _markdownPipeline = pipeline; }
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) => renderer.ObjectRenderers.AddIfNotAlready(new LinkerRenderAdapter(LinkRenderers));
public MarkdownService() { pipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions() .Use <TargetLinkExtension>() .Build(); }
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) => renderer.ObjectRenderers.Insert(0, Renderer);
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) { renderer.ObjectRenderers.InsertBefore <ListRenderer>(new TableOfContentsHtmlRenderer()); }
internal void Process() { navs = ParseDirectory(Nav.RootPath + src); p = new MarkdownPipelineBuilder().UsePipeTables(new PipeTableOptions { RequireHeaderSeparator = true }) .UseBootstrap() .UseYamlFrontMatter() .UseGenericAttributes() .UseAutoIdentifiers(AutoIdentifierOptions.GitHub) .Build(); for (int i = 0; i < MDs.Count; i++) { StringBuilder nhtml = new StringBuilder(); StringBuilder ohtml = new StringBuilder(); foreach (NavItem item in navs.Items) { ActiveState active = ActiveState.None; string uid = Nav.GetNavItem(MDs[i]).UID; string nid = Nav.SanitizeFilename(item.Title).Replace(" ", string.Empty); if (item.Items.Any(t => t.UID == uid)) { active = ActiveState.Child; nhtml.AppendLine("<li class=\"panel expanded active\">" + $"<a class=\"area\" href=\"#{nid}\" data-parent=\"#main-nav\" data-toggle=\"collapse\">{item.Title}</a>"); nhtml.AppendLine($"<ul id=\"{nid}\" class=\"collapse in\">"); } else { nhtml.AppendLine("<li class=\"panel collapsed\">" + $"<a class=\"area\" href=\"#{nid}\" data-parent=\"#main-nav\" data-toggle=\"collapse\">{item.Title}</a>"); nhtml.AppendLine($"<ul id=\"{nid}\" class=\"collapse\">"); } ohtml.AppendLine($"<optgroup label=\"{item.Title}\">"); foreach (NavItem navItem in item.Items) { if (active == ActiveState.Child && uid == navItem.UID) { nhtml.AppendLine(ProcessNav(navItem, active, uid)); ohtml.AppendLine($"<option selected=\"selected\" value=\"{navItem.Link}\">{navItem.Title}</option>"); } else { nhtml.AppendLine(ProcessNav(navItem, ActiveState.None, uid)); ohtml.AppendLine($"<option value=\"{navItem.Link}\">{navItem.Title}</option>"); } } nhtml.AppendLine("</ul></li></div>"); ohtml.AppendLine("</optgroup>"); } navHtml = minifier.Minify(nhtml.ToString()).MinifiedContent; optHtml = "<select id=\"small-nav-dropdown\">" + minifier.Minify(ohtml.ToString()).MinifiedContent + "</select>"; ProcessMD(MDs[i]); }//); //! Uncomment to use parallel processing. Useful when you have hundreds of files. // Parallel.For(0, MDs.Count, i => ProcessMD(MDs[i])); }
public NotificationBuilder(NotifyQueue notifiyQueue) { markdown = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build(); this.notifiyQueue = notifiyQueue; }
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) { throw new System.NotImplementedException(); }
public MarkdownContentLoader(MarkdownPipeline markdownPipeline) { _markdownPipeline = markdownPipeline; }
/// <summary> /// Start the preview on the Control. /// </summary> /// <param name="dataSource">Path to the file.</param> public override void DoPreview <T>(T dataSource) { CleanupWebView2UserDataFolder(); _infoBarDisplayed = false; try { if (!(dataSource is string filePath)) { throw new ArgumentException($"{nameof(dataSource)} for {nameof(MarkdownPreviewHandler)} must be a string but was a '{typeof(T)}'"); } string fileText = File.ReadAllText(filePath); Regex imageTagRegex = new Regex(@"<[ ]*img.*>"); if (imageTagRegex.IsMatch(fileText)) { _infoBarDisplayed = true; } var htmlHeader = Common.UI.ThemeManager.GetWindowsBaseColor().ToLowerInvariant() == "dark" ? htmlDarkHeader : htmlLightHeader; _extension.FilePath = Path.GetDirectoryName(filePath); MarkdownPipeline pipeline = _pipelineBuilder.Build(); string parsedMarkdown = Markdig.Markdown.ToHtml(fileText, pipeline); string markdownHTML = $"{htmlHeader}{parsedMarkdown}{htmlFooter}"; _browser = new WebView2() { Dock = DockStyle.Fill, }; InvokeOnControlThread(() => { ConfiguredTaskAwaitable <CoreWebView2Environment> .ConfiguredTaskAwaiter webView2EnvironmentAwaiter = CoreWebView2Environment .CreateAsync(userDataFolder: _webView2UserDataFolder) .ConfigureAwait(true).GetAwaiter(); webView2EnvironmentAwaiter.OnCompleted(() => { InvokeOnControlThread(async() => { try { _webView2Environment = webView2EnvironmentAwaiter.GetResult(); await _browser.EnsureCoreWebView2Async(_webView2Environment).ConfigureAwait(true); await _browser.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("window.addEventListener('contextmenu', window => {window.preventDefault();});"); _browser.CoreWebView2.SetVirtualHostNameToFolderMapping(VirtualHostName, AssemblyDirectory, CoreWebView2HostResourceAccessKind.Allow); // WebView2.NavigateToString() limitation // See https://docs.microsoft.com/en-us/dotnet/api/microsoft.web.webview2.core.corewebview2.navigatetostring?view=webview2-dotnet-1.0.864.35#remarks // While testing the limit, it turned out it is ~1.5MB, so to be on a safe side we go for 1.5m bytes Uri filenameUri = null; if (markdownHTML.Length > 1_500_000) { string filename = _webView2UserDataFolder + "\\" + Guid.NewGuid().ToString() + ".html"; File.WriteAllText(filename, markdownHTML); filenameUri = new Uri(filename); _browser.Source = filenameUri; } else { _browser.NavigateToString(markdownHTML); } Controls.Add(_browser); _browser.NavigationStarting += async(object sender, CoreWebView2NavigationStartingEventArgs args) => { if (args.Uri != null && args.Uri != filenameUri?.ToString() && args.IsUserInitiated) { args.Cancel = true; await Launcher.LaunchUriAsync(new Uri(args.Uri)); } }; if (_infoBarDisplayed) { _infoBar = GetTextBoxControl(Resources.BlockedImageInfoText); Resize += FormResized; Controls.Add(_infoBar); } } catch (NullReferenceException) { } }); }); }); PowerToysTelemetry.Log.WriteEvent(new MarkdownFilePreviewed()); } catch (Exception ex) { PowerToysTelemetry.Log.WriteEvent(new MarkdownFilePreviewError { Message = ex.Message }); InvokeOnControlThread(() => { Controls.Clear(); _infoBarDisplayed = true; _infoBar = GetTextBoxControl(Resources.MarkdownNotPreviewedError); Resize += FormResized; Controls.Add(_infoBar); }); } finally { base.DoPreview(dataSource); } }
internal static (MediaPost MediaPost, Guid Id) CreateMediaPost(String fileContents, MarkdownPipeline markdownPipeline) { var(frontMatter, content) = fileContents.SplitYamlFile(); var deserializer = new DeserializerBuilder() .WithNamingConvention(LowerCaseNamingConvention.Instance) .Build(); var yamlMediaPost = deserializer.Deserialize <YamlMediaPost>(frontMatter); Guid id = yamlMediaPost.Id; var mediaPost = new MediaPost() { Author = yamlMediaPost.Author, Description = content.ToHtml(markdownPipeline), Media = CreateMediaItem(yamlMediaPost.MediaType, yamlMediaPost.MediaItem), MediaType = yamlMediaPost.MediaType, Posted = yamlMediaPost.Posted, Tags = yamlMediaPost.Tags, Title = yamlMediaPost.Title, IsPublished = yamlMediaPost.IsPublished }; return(mediaPost, id); }
public MarkdownWrapper() { _pipeline = new MarkdownPipelineBuilder() .UseAdvancedExtensions() .Build(); }
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) { PipelineHelpers.SetupSyntaxRender(renderer); }
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) { var index = renderer.ObjectRenderers.FindIndex(r => r.GetType() == typeof(LinkInlineRenderer)); renderer.ObjectRenderers[index] = new EmbeddedImageLinkInlineRenderer(this.BaseDirectory); }
/// <summary> /// Start the preview on the Control. /// </summary> /// <param name="dataSource">Path to the file.</param> public override void DoPreview <T>(T dataSource) { _infoBarDisplayed = false; try { if (!(dataSource is string filePath)) { throw new ArgumentException($"{nameof(dataSource)} for {nameof(MarkdownPreviewHandler)} must be a string but was a '{typeof(T)}'"); } string fileText = File.ReadAllText(filePath); Regex imageTagRegex = new Regex(@"<[ ]*img.*>"); if (imageTagRegex.IsMatch(fileText)) { _infoBarDisplayed = true; } _extension.FilePath = Path.GetDirectoryName(filePath); MarkdownPipeline pipeline = _pipelineBuilder.Build(); string parsedMarkdown = Markdig.Markdown.ToHtml(fileText, pipeline); string markdownHTML = $"{htmlHeader}{parsedMarkdown}{htmlFooter}"; InvokeOnControlThread(() => { _browser = new WebBrowserExt { DocumentText = markdownHTML, Dock = DockStyle.Fill, IsWebBrowserContextMenuEnabled = false, ScriptErrorsSuppressed = true, ScrollBarsEnabled = true, AllowNavigation = false, }; Controls.Add(_browser); if (_infoBarDisplayed) { _infoBar = GetTextBoxControl(Resources.BlockedImageInfoText); Resize += FormResized; Controls.Add(_infoBar); } }); PowerToysTelemetry.Log.WriteEvent(new MarkdownFilePreviewed()); } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) #pragma warning restore CA1031 // Do not catch general exception types { PowerToysTelemetry.Log.WriteEvent(new MarkdownFilePreviewError { Message = ex.Message }); InvokeOnControlThread(() => { Controls.Clear(); _infoBarDisplayed = true; _infoBar = GetTextBoxControl(Resources.MarkdownNotPreviewedError); Resize += FormResized; Controls.Add(_infoBar); }); } finally { base.DoPreview(dataSource); } }
static CatalogConverter() { _markdownPipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build(); }
protected static void ToPPTX(string markdown, string pptxFilePath, PPTXSetting options = null, MarkdownPipeline pipeline = null) { options = options ?? new PPTXSetting() { SlideSize = EPPTXSlideSizeValues.Screen4x3 }; var pptx = ToPPTxDocument(markdown, options, pipeline); pptx.SaveAs(pptxFilePath, options); }