2020-11-22 15:50:07 -05:00
|
|
|
/*
|
2021-01-06 15:37:59 -05:00
|
|
|
SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
|
2020-11-22 15:50:07 -05:00
|
|
|
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
*/
|
|
|
|
|
2020-10-08 16:24:42 -04:00
|
|
|
import MarkdownIt from 'markdown-it'
|
2020-11-23 06:40:54 -05:00
|
|
|
import { TocAst } from 'markdown-it-toc-done-right'
|
2020-10-08 16:24:42 -04:00
|
|
|
import { RawYAMLMetadata } from '../../editor/yaml-metadata/yaml-metadata'
|
|
|
|
import { documentToc } from '../markdown-it-plugins/document-toc'
|
|
|
|
import { frontmatterExtract } from '../markdown-it-plugins/frontmatter'
|
|
|
|
import { headlineAnchors } from '../markdown-it-plugins/headline-anchors'
|
|
|
|
import { highlightedCode } from '../markdown-it-plugins/highlighted-code'
|
|
|
|
import { plantumlWithError } from '../markdown-it-plugins/plantuml'
|
|
|
|
import { quoteExtra } from '../markdown-it-plugins/quote-extra'
|
|
|
|
import { legacySlideshareShortCode } from '../regex-plugins/replace-legacy-slideshare-short-code'
|
|
|
|
import { legacySpeakerdeckShortCode } from '../regex-plugins/replace-legacy-speakerdeck-short-code'
|
|
|
|
import { AsciinemaReplacer } from '../replace-components/asciinema/asciinema-replacer'
|
|
|
|
import { GistReplacer } from '../replace-components/gist/gist-replacer'
|
|
|
|
import { KatexReplacer } from '../replace-components/katex/katex-replacer'
|
|
|
|
import { LineMarkers, lineNumberMarker } from '../replace-components/linemarker/line-number-marker'
|
|
|
|
import { PdfReplacer } from '../replace-components/pdf/pdf-replacer'
|
|
|
|
import { VimeoReplacer } from '../replace-components/vimeo/vimeo-replacer'
|
|
|
|
import { YoutubeReplacer } from '../replace-components/youtube/youtube-replacer'
|
|
|
|
import { BasicMarkdownItConfigurator } from './BasicMarkdownItConfigurator'
|
|
|
|
|
|
|
|
export class FullMarkdownItConfigurator extends BasicMarkdownItConfigurator {
|
|
|
|
constructor (
|
|
|
|
private useFrontmatter: boolean,
|
|
|
|
private onYamlError: (error: boolean) => void,
|
|
|
|
private onRawMeta: (rawMeta: RawYAMLMetadata) => void,
|
|
|
|
private onToc: (toc: TocAst) => void,
|
|
|
|
private onLineMarkers: (lineMarkers: LineMarkers[]) => void
|
|
|
|
) {
|
|
|
|
super()
|
|
|
|
}
|
|
|
|
|
|
|
|
protected configure (markdownIt: MarkdownIt): void {
|
|
|
|
super.configure(markdownIt)
|
|
|
|
|
|
|
|
this.configurations.push(
|
|
|
|
plantumlWithError,
|
|
|
|
(markdownIt) => {
|
|
|
|
frontmatterExtract(markdownIt,
|
2020-10-25 16:17:59 -04:00
|
|
|
!this.useFrontmatter
|
|
|
|
? undefined
|
|
|
|
: {
|
|
|
|
onYamlError: (error: boolean) => this.onYamlError(error),
|
|
|
|
onRawMeta: (rawMeta: RawYAMLMetadata) => this.onRawMeta(rawMeta)
|
|
|
|
})
|
2020-10-08 16:24:42 -04:00
|
|
|
},
|
|
|
|
headlineAnchors,
|
|
|
|
KatexReplacer.markdownItPlugin,
|
|
|
|
YoutubeReplacer.markdownItPlugin,
|
|
|
|
VimeoReplacer.markdownItPlugin,
|
|
|
|
GistReplacer.markdownItPlugin,
|
|
|
|
legacySlideshareShortCode,
|
|
|
|
legacySpeakerdeckShortCode,
|
|
|
|
PdfReplacer.markdownItPlugin,
|
|
|
|
AsciinemaReplacer.markdownItPlugin,
|
|
|
|
highlightedCode,
|
|
|
|
quoteExtra,
|
|
|
|
(markdownIt) => documentToc(markdownIt, this.onToc),
|
|
|
|
(markdownIt) => lineNumberMarker(markdownIt, (lineMarkers) => this.onLineMarkers(lineMarkers))
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|