Select Git revision
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
parsing.ts 21.85 KiB
import matter from "gray-matter"; // Front matter yaml metadata parsing
import md from "markdown-it"; // Markdown parsing
import bracketed_spans_plugin from "markdown-it-bracketed-spans"; //attributed spans (`[blah]{.fin yes=1)}`)
import attributes from "markdown-it-attrs";
import { full as emoji_plugin } from "markdown-it-emoji"; // `:smile:` -> `😊`
import footnote_plugin from "markdown-it-footnote"; // for `[^1]` and friends
import abbreviation from "markdown-it-abbr";
import definitionList from "markdown-it-deflist";
import inserted from "markdown-it-ins";
import marked from "markdown-it-mark";
import subscript from "markdown-it-sub";
import superscript from "markdown-it-sup";
import container from "markdown-it-container";
import Token from "markdown-it/lib/token.mjs";
import { getMetadataProblems } from "./metadataChecks";
import {
renderResolutionToHtml,
renderTodoToHtml,
renderContainerToAlert,
} from "./rendering";
const markdownParser = md({
html: true,
xhtmlOut: true,
breaks: true,
linkify: true,
typographer: true,
quotes: "„“‚‘",
})
.use(attributes)
.use(emoji_plugin)
.use(footnote_plugin)
.use(abbreviation)
.use(definitionList)
.use(inserted)
.use(marked)
.use(subscript)
.use(superscript)
// Legacy
.use(bracketed_spans_plugin)
.use(container, "warning", {
render: renderContainerToAlert("alert-warning", "alert"),
})
.use(container, "Meinungsbild", {
render: renderContainerToAlert("alert-secondary", "Meinungsbild"),
})
.use(container, "GO-Antrag", {
render: renderContainerToAlert("alert-secondary", "GO-Antrag"),
})
// New
.use(container, "resolution")
.use(container, "todo");
markdownParser.linkify.set({ fuzzyEmail: false });
export interface ParseResults {
meta: FinishedTranscriptMeta;
html: string;
ast: Token[];
}
export function parseOld(
old: FinishedTranscriptMeta[],
): FinishedTranscriptMeta[] {
return old.map((t) => ({
// Fallback for some options:
...t,
spec_version: t.spec_version ?? -1, // PDFs
no_link: t.no_link ?? false,
// Reformat resolutions
resolutions: t.resolutions?.map((r) => {