{"version":3,"file":"DocFencedCode.js","sourceRoot":"","sources":["../../src/nodes/DocFencedCode.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport { DocNodeKind, type IDocNodeParameters, DocNode, type IDocNodeParsedParameters } from './DocNode';\r\nimport type { TokenSequence } from '../parser/TokenSequence';\r\nimport { DocExcerpt, ExcerptKind } from './DocExcerpt';\r\n\r\n/**\r\n * Constructor parameters for {@link DocFencedCode}.\r\n */\r\nexport interface IDocFencedCodeParameters extends IDocNodeParameters {\r\n language: string;\r\n\r\n code: string;\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link DocFencedCode}.\r\n */\r\nexport interface IDocFencedCodeParsedParameters extends IDocNodeParsedParameters {\r\n openingFenceExcerpt: TokenSequence;\r\n spacingAfterOpeningFenceExcerpt?: TokenSequence;\r\n\r\n languageExcerpt?: TokenSequence;\r\n spacingAfterLanguageExcerpt?: TokenSequence;\r\n\r\n codeExcerpt: TokenSequence;\r\n\r\n spacingBeforeClosingFenceExcerpt?: TokenSequence;\r\n closingFenceExcerpt: TokenSequence;\r\n spacingAfterClosingFenceExcerpt?: TokenSequence;\r\n}\r\n\r\n/**\r\n * Represents CommonMark-style code fence, i.e. a block of program code that\r\n * starts and ends with a line comprised of three backticks. The opening delimiter\r\n * can also specify a language for a syntax highlighter.\r\n */\r\nexport class DocFencedCode extends DocNode {\r\n // The opening ``` delimiter and padding\r\n private readonly _openingFenceExcerpt: DocExcerpt | undefined;\r\n\r\n private readonly _spacingAfterOpeningFenceExcerpt: DocExcerpt | undefined;\r\n\r\n // The optional language string\r\n private _language: string | undefined;\r\n private readonly _languageExcerpt: DocExcerpt | undefined;\r\n\r\n private readonly _spacingAfterLanguageExcerpt: DocExcerpt | undefined;\r\n\r\n // The code content\r\n private _code: string | undefined;\r\n private readonly _codeExcerpt: DocExcerpt | undefined;\r\n\r\n // The closing ``` delimiter and padding\r\n private readonly _spacingBeforeClosingFenceExcerpt: DocExcerpt | undefined;\r\n\r\n private readonly _closingFenceExcerpt: DocExcerpt | undefined;\r\n\r\n private readonly _spacingAfterClosingFenceExcerpt: DocExcerpt | undefined;\r\n\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(parameters: IDocFencedCodeParameters | IDocFencedCodeParsedParameters) {\r\n super(parameters);\r\n\r\n if (DocNode.isParsedParameters(parameters)) {\r\n this._openingFenceExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.FencedCode_OpeningFence,\r\n content: parameters.openingFenceExcerpt\r\n });\r\n if (parameters.spacingAfterOpeningFenceExcerpt) {\r\n this._spacingAfterOpeningFenceExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.Spacing,\r\n content: parameters.spacingAfterOpeningFenceExcerpt\r\n });\r\n }\r\n\r\n if (parameters.languageExcerpt) {\r\n this._languageExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.FencedCode_Language,\r\n content: parameters.languageExcerpt\r\n });\r\n }\r\n if (parameters.spacingAfterLanguageExcerpt) {\r\n this._spacingAfterLanguageExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.Spacing,\r\n content: parameters.spacingAfterLanguageExcerpt\r\n });\r\n }\r\n\r\n this._codeExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.FencedCode_Code,\r\n content: parameters.codeExcerpt\r\n });\r\n\r\n if (parameters.spacingBeforeClosingFenceExcerpt) {\r\n this._spacingBeforeClosingFenceExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.Spacing,\r\n content: parameters.spacingBeforeClosingFenceExcerpt\r\n });\r\n }\r\n this._closingFenceExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.FencedCode_ClosingFence,\r\n content: parameters.closingFenceExcerpt\r\n });\r\n if (parameters.spacingAfterClosingFenceExcerpt) {\r\n this._spacingAfterClosingFenceExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.Spacing,\r\n content: parameters.spacingAfterClosingFenceExcerpt\r\n });\r\n }\r\n } else {\r\n this._code = parameters.code;\r\n this._language = parameters.language;\r\n }\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.FencedCode;\r\n }\r\n\r\n /**\r\n * A name that can optionally be included after the opening code fence delimiter,\r\n * on the same line as the three backticks. This name indicates the programming language\r\n * for the code, which a syntax highlighter may use to style the code block.\r\n *\r\n * @remarks\r\n * The TSDoc standard requires that the language \"ts\" should be interpreted to mean TypeScript.\r\n * Other languages names may be supported, but this is implementation dependent.\r\n *\r\n * CommonMark refers to this field as the \"info string\".\r\n *\r\n * @privateRemarks\r\n * Examples of language strings supported by GitHub flavored markdown:\r\n * https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml\r\n */\r\n public get language(): string | 'ts' | '' {\r\n if (this._language === undefined) {\r\n if (this._languageExcerpt !== undefined) {\r\n this._language = this._languageExcerpt.content.toString();\r\n } else {\r\n this._language = '';\r\n }\r\n }\r\n return this._language;\r\n }\r\n\r\n /**\r\n * The text that should be rendered as code.\r\n */\r\n public get code(): string {\r\n if (this._code === undefined) {\r\n if (this._codeExcerpt !== undefined) {\r\n this._code = this._codeExcerpt.content.toString();\r\n }\r\n }\r\n return this._code!;\r\n }\r\n\r\n /** @override */\r\n protected onGetChildNodes(): ReadonlyArray {\r\n return [\r\n this._openingFenceExcerpt,\r\n this._spacingAfterOpeningFenceExcerpt,\r\n\r\n this._languageExcerpt,\r\n this._spacingAfterLanguageExcerpt,\r\n\r\n this._codeExcerpt,\r\n\r\n this._spacingBeforeClosingFenceExcerpt,\r\n this._closingFenceExcerpt,\r\n this._spacingAfterClosingFenceExcerpt\r\n ];\r\n }\r\n}\r\n"]}