CARVIEW |
Select Language
HTTP/2 200
date: Thu, 24 Jul 2025 01:39:40 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
x-robots-tag: none
etag: W/"e4746ef9c8545f4d806911556b6a83a1"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=gAjMw2gggUnTObd0rP%2B5Wf%2BBdZCAq3wKwgDBp8Bfx0VC2DM7IwchSiCola%2BsaX6tP%2BB9CHW%2BOrm6lIYfcekluC22OdRB0XK4k5%2Fti5TVpvOCjbEspWv4K9yxBw1A2twKam2wEDBxOpXfo1FtigvVZ%2B1XyMUjrHNdsHH%2FukpMFB3h6uGGEGmXczN6RGsS6ksWA3UgJqTLE2IuE3oZHp1QE96Htfp9JmUy4L2Eof%2BcQaEtj6O4%2BB6xEcgd%2BKr1wHh37d9xJ8DPrD4T8dcwlozDng%3D%3D--Tuu7GdZibZswIlZQ--Vi%2BCtO7Ky7d7LadcO5nlJQ%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.1856513180.1753321180; Path=/; Domain=github.com; Expires=Fri, 24 Jul 2026 01:39:40 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Fri, 24 Jul 2026 01:39:40 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: 8A7C:124FF4:11CBA78:158C84C:68818EDC
Home · Knagis/CommonMark.NET Wiki · GitHub
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 146
Home
mloenow edited this page Mar 12, 2016
·
4 revisions
Provides an easy solution to visit every node of the parsed markdown document and perform simple modifications.
// parse markdown into document structure
var document = CommonMarkConverter.Parse("[click this link](~/hello)");
// walk the document node tree
foreach (var node in document.AsEnumerable())
{
if (
// start and end of each node may be visited separately
node.IsOpening
// blocks are elemets like paragraphs and lists, inlines are
// elements like emphasis, links, images.
&& node.Inline != null
&& node.Inline.Tag == InlineTag.Link)
{
if (node.Inline.TargetUrl.StartsWith("~"))
node.Inline.TargetUrl = "https://server/app/" +
node.Inline.TargetUrl.Substring(1);
}
}
using (var writer = new System.IO.StringWriter())
{
// write the HTML output
CommonMarkConverter.ProcessStage3(document, writer);
Console.WriteLine(writer.ToString());
}
Provides methods to override the default HTML output by replacing only the parts needed.
private class CustomHtmlFormatter : CommonMark.Formatters.HtmlFormatter
{
public CustomHtmlFormatter(System.IO.TextWriter target, CommonMarkSettings settings)
: base(target, settings)
{
}
protected override void WriteInline(Inline inline, bool isOpening, bool isClosing, out bool ignoreChildNodes)
{
if (
// verify that the inline element is one that should be modified
inline.Tag == InlineTag.Link
// verify that the formatter should output HTML and not plain text
&& !this.RenderPlainTextInlines.Peek())
{
// instruct the formatter to process all nested nodes automatically
ignoreChildNodes = false;
// start and end of each node may be visited separately
if (isOpening)
{
this.Write("<a target=\"_blank\" href=\"");
this.WriteEncodedUrl(inline.TargetUrl);
this.Write("\">");
}
// note that isOpening and isClosing can be true at the same time
if (isClosing)
{
this.Write("</a>");
}
}
else
{
// in all other cases the default implementation will output the correct HTML
base.WriteInline(inline, isOpening, isClosing, out ignoreChildNodes);
}
}
}
// set the default HTML formatter for all future conversions
CommonMarkSettings.Default.OutputDelegate =
(doc, output, settings) =>
new CustomHtmlFormatter(output, settings).WriteDocument(doc);
var html = CommonMarkConverter.Convert("[click **this** link](~/hello)");
You can’t perform that action at this time.