Path: blob/main/src/format/markdown/format-markdown.ts
6451 views
/*1* format-markdown.ts2*3* Copyright (C) 2020-2022 Posit Software, PBC4*/56import { kFrom, kOutputDivs, kToc, kVariant } from "../../config/constants.ts";7import { Format } from "../../config/types.ts";8import { pandocFormat } from "../../core/pandoc/pandoc-formats.ts";9import { createFormat, plaintextFormat } from "../formats-shared.ts";10import { kGfmCommonmarkVariant } from "./format-markdown-consts.ts";1112export function requiresShortcodeUnescapePostprocessor(markdown: string) {13return markdown.includes("{{{<");14}1516const kDisplayNameGFM = "Github (GFM)";17const kDisplayNameCommonMark = "CommonMark";18const kDisplayNameMarkdown = "Markdown";1920export function shortcodeUnescapePostprocessor(output: string): Promise<void> {21// unescape shortcodes22Deno.writeTextFileSync(23output,24Deno.readTextFileSync(output)25.replaceAll("{{\\<", "{{<")26.replaceAll("\\>}}", ">}}"),27);28return Promise.resolve();29}3031export function gfmFormat(): Format {32return createFormat(kDisplayNameGFM, "md", markdownFormat(kDisplayNameGFM), {33pandoc: {34to: "commonmark",35},36render: {37[kVariant]: kGfmCommonmarkVariant,38},39resolveFormat: (format: Format) => {40if (format.pandoc[kToc] === true) {41// we need to add gfm_auto_identifiers to reader otherwise ids for toc are not valid42// see https://github.com/quarto-dev/quarto-cli/issues/4917 and43// https://github.com/jgm/pandoc/issues/870944format.pandoc[kFrom] = pandocFormat(45format.pandoc[kFrom] || "markdown",46["gfm_auto_identifiers"],47[],48);49}50},51});52}5354// for 'md' alias55export function markdownWithCommonmarkExtensionsFormat() {56return createFormat(57kDisplayNameCommonMark,58"md",59markdownFormat(kDisplayNameCommonMark),60{61pandoc: {62to: [63"markdown_strict",64"+raw_html",65"+all_symbols_escapable",66"+backtick_code_blocks",67"+fenced_code_blocks",68"+space_in_atx_header",69"+intraword_underscores",70"+lists_without_preceding_blankline",71"+shortcut_reference_links",72].join(""),73},74},75);76}7778export function commonmarkFormat(to: string) {79return createFormat(80kDisplayNameCommonMark,81"md",82markdownFormat(kDisplayNameCommonMark),83{84pandoc: {85to,86},87},88);89}9091export function pandocMarkdownFormat(): Format {92return createFormat(93kDisplayNameMarkdown,94"md",95plaintextFormat(kDisplayNameMarkdown, "md"),96{},97);98}99100export function markdownFormat(displayName: string): Format {101return createFormat(displayName, "md", plaintextFormat(displayName, "md"), {102// markdown shouldn't include cell divs (even if it103// technically supports raw html)104render: {105[kOutputDivs]: false,106},107});108}109110111