@diplodoc/cli 0.0.0-rc-resolve-codeblock-md2md-18975359297 → 0.0.0-rc-resolve-codeblock-md2md-18994893059

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -296145,7 +296145,7 @@ var import_config70 = require("@diplodoc/cli/lib/config");
296145
296145
 
296146
296146
  // src/constants.ts
296147
296147
  var import_node_path2 = require("node:path");
296148
- var VERSION = "0.0.0-rc-resolve-codeblock-md2md-18975359297" ? "0.0.0-rc-resolve-codeblock-md2md-18975359297" : "0.0.0";
296148
+ var VERSION = "0.0.0-rc-resolve-codeblock-md2md-18994893059" ? "0.0.0-rc-resolve-codeblock-md2md-18994893059" : "0.0.0";
296149
296149
  var MAIN_TIMER_ID = "Build time";
296150
296150
  var ASSETS_FOLDER = (0, import_node_path2.resolve)(__dirname, "../assets");
296151
296151
  var BUNDLE_FOLDER = "_bundle";
@@ -310910,8 +310910,8 @@ var run = async (argv2) => {
310910
310910
  if (import_node_worker_threads4.isMainThread && require.main === module) {
310911
310911
  (async () => {
310912
310912
  import_utils94.console.time(MAIN_TIMER_ID);
310913
- if ("0.0.0-rc-resolve-codeblock-md2md-18975359297") {
310914
- import_utils94.console.log(`Using v${"0.0.0-rc-resolve-codeblock-md2md-18975359297"} version`);
310913
+ if ("0.0.0-rc-resolve-codeblock-md2md-18994893059") {
310914
+ import_utils94.console.log(`Using v${"0.0.0-rc-resolve-codeblock-md2md-18994893059"} version`);
310915
310915
  }
310916
310916
  const report = await run(process.argv);
310917
310917
  import_utils94.console.timeEnd(MAIN_TIMER_ID);
package/build/index.mjs CHANGED
@@ -296133,7 +296133,7 @@ import { Command as Command7 } from "@diplodoc/cli/lib/config";
296133
296133
 
296134
296134
  // src/constants.ts
296135
296135
  import { resolve as resolve2 } from "node:path";
296136
- var VERSION = "0.0.0-rc-resolve-codeblock-md2md-18975359297" ? "0.0.0-rc-resolve-codeblock-md2md-18975359297" : "0.0.0";
296136
+ var VERSION = "0.0.0-rc-resolve-codeblock-md2md-18994893059" ? "0.0.0-rc-resolve-codeblock-md2md-18994893059" : "0.0.0";
296137
296137
  var MAIN_TIMER_ID = "Build time";
296138
296138
  var ASSETS_FOLDER = resolve2(__dirname, "../assets");
296139
296139
  var BUNDLE_FOLDER = "_bundle";
@@ -310923,8 +310923,8 @@ var run = async (argv2) => {
310923
310923
  if (isMainThread4 && __require.main === module) {
310924
310924
  (async () => {
310925
310925
  console5.time(MAIN_TIMER_ID);
310926
- if ("0.0.0-rc-resolve-codeblock-md2md-18975359297") {
310927
- console5.log(`Using v${"0.0.0-rc-resolve-codeblock-md2md-18975359297"} version`);
310926
+ if ("0.0.0-rc-resolve-codeblock-md2md-18994893059") {
310927
+ console5.log(`Using v${"0.0.0-rc-resolve-codeblock-md2md-18994893059"} version`);
310928
310928
  }
310929
310929
  const report = await run(process.argv);
310930
310930
  console5.timeEnd(MAIN_TIMER_ID);
@@ -547,7 +547,7 @@ function resolveAssets(content) {
547
547
  const pcImages = filterRanges(exclude, findPcImages(content));
548
548
  for (const info of [...defs, ...links, ...pcImages]) {
549
549
  try {
550
- if (info.path !== null) {
550
+ if (info.path !== null && !info.path?.startsWith("*") && !info.path?.includes("%")) {
551
551
  info.path = (0, import_utils5.rebasePath)(this.path, decodeURIComponent(info.path));
552
552
  }
553
553
  assets.push(info);
@@ -702,6 +702,7 @@ function resolveInlineDirectives(content) {
702
702
  // src/core/markdown/loader/resolve-code.ts
703
703
  var import_markdown_it = __toESM(require("markdown-it"));
704
704
  var import_markdown_it_deflist = __toESM(require("markdown-it-deflist"));
705
+ var import_imsize = __toESM(require("@diplodoc/transform/lib/plugins/imsize"));
705
706
  var import_table = __toESM(require("@diplodoc/transform/lib/plugins/table"));
706
707
  function computeLineStarts(lines) {
707
708
  const lineStarts = [0];
@@ -887,6 +888,7 @@ function resolveBlockCodes(content) {
887
888
  path: ""
888
889
  };
889
890
  md.use(import_markdown_it_deflist.default, diplodocOptions);
891
+ md.use(import_imsize.default, diplodocOptions);
890
892
  md.use(import_table.default, diplodocOptions);
891
893
  const tokens = md.parse(content, {});
892
894
  const codes = [];
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/core/markdown/index.ts", "../../src/core/markdown/hooks.ts", "../../src/core/markdown/MarkdownService.ts", "../../src/core/markdown/loader.ts", "../../src/core/markdown/loader/mangle-frontmatter.ts", "../../src/core/markdown/loader/template-content.ts", "../../src/core/markdown/loader/resolve-comments.ts", "../../src/core/markdown/loader/resolve-deps.ts", "../../src/core/markdown/utils.ts", "../../src/core/markdown/loader/resolve-assets.ts", "../../src/core/markdown/loader/resolve-headings.ts", "../../src/core/markdown/loader/resolve-no-translate.ts", "../../src/core/markdown/loader/resolve-code.ts"],
4
- "sourcesContent": ["export * from './types';\n\nexport {getHooks} from './hooks';\nexport {MarkdownService} from './MarkdownService';\n", "import type {VFile} from '~/core/utils';\nimport type {Collect, Plugin} from './types';\nimport type {Meta} from '~/core/meta';\n\nimport {AsyncSeriesHook, AsyncSeriesWaterfallHook} from 'tapable';\n\nimport {generateHooksAccess} from '~/core/utils';\n\nexport function hooks(name: string) {\n return {\n Collects: new AsyncSeriesWaterfallHook<[Collect[]]>(['collects'], `${name}.Collects`),\n Plugins: new AsyncSeriesWaterfallHook<[Plugin[]]>(['plugins'], `${name}.Plugins`),\n Loaded: new AsyncSeriesHook<[string, DeepFrozen<Meta>, NormalizedPath]>(\n ['markdown', 'meta', 'path'],\n `${name}.Loaded`,\n ),\n Resolved: new AsyncSeriesHook<[string, NormalizedPath]>(\n ['markdown', 'path'],\n `${name}.Resolved`,\n ),\n Dump: new AsyncSeriesHook<VFile<string>>(['vfile'], `${name}.Dump`),\n };\n}\n\nconst [getHooks, withHooks] = generateHooksAccess('Markdown', hooks);\n\nexport {getHooks, withHooks};\n", "import type {Run as BaseRun} from '~/core/run';\nimport type {VarsService} from '~/core/vars';\nimport type {Meta, MetaService} from '~/core/meta';\nimport type {LoaderContext, TransformMode} from './loader';\nimport type {\n AssetInfo,\n Collect,\n EntryGraph,\n EntryInfo,\n GraphInfo,\n HeadingInfo,\n IncludeInfo,\n Location,\n Plugin,\n} from './types';\n\nimport {dirname, join} from 'node:path';\nimport {SourceMap} from '@diplodoc/liquid';\n\nimport {Buckets, Defer, Graph, VFile, all, bounded, fullPath, normalizePath} from '~/core/utils';\n\nimport {getHooks, withHooks} from './hooks';\nimport {LoaderAPI, loader} from './loader';\nimport {parseHeading} from './utils';\n\ntype MarkdownServiceConfig = {\n outputFormat: `${TransformMode}`;\n template: {\n enabled: boolean;\n features: {\n substitutions: boolean;\n conditions: boolean;\n };\n scopes: {\n code: boolean;\n };\n };\n};\n\ntype Run = BaseRun<MarkdownServiceConfig> & {\n meta: MetaService;\n vars: VarsService;\n};\n\ntype Options = {\n mode: 'build' | 'translate';\n};\n\nfunction hash(path: NormalizedPath, from?: NormalizedPath) {\n return `${path}${from ? '+' + from : ''}`;\n}\n\nconst byLocation = (a: HeadingInfo, b: HeadingInfo) => a.location[0] - b.location[0];\n\n@withHooks\nexport class MarkdownService {\n readonly name = 'Markdown';\n\n get logger() {\n return this.run.logger;\n }\n\n get plugins() {\n return this._plugins.slice();\n }\n\n get collects() {\n return this._collects.slice();\n }\n\n get config() {\n return this.run.config;\n }\n\n private run: Run;\n\n private _collects: Collect[] = [];\n\n private _plugins: Plugin[] = [];\n\n private pathToMeta = new Buckets<Meta>();\n\n private pathToComments = new Buckets<Location[]>();\n\n private pathToDeps = new Buckets<IncludeInfo[]>();\n\n private pathToAssets = new Buckets<AssetInfo[]>();\n\n private pathToHeadings = new Buckets<HeadingInfo[]>();\n\n private pathToSourcemap = new Buckets<Record<number | string, string>>();\n\n private cache: Hash<Promise<string> | string> = {};\n\n private options;\n\n constructor(run: Run, options: Options = {mode: 'build'}) {\n this.run = run;\n this.options = options;\n }\n\n @bounded async init() {\n this._collects = await getHooks(this).Collects.promise(this._collects);\n this._plugins = await getHooks(this).Plugins.promise(this._plugins);\n }\n\n @bounded async load(path: RelativePath, from?: NormalizedPath) {\n const file = normalizePath(path);\n const key = hash(file, from);\n\n if (key in this.cache) {\n return this.cache[key];\n }\n\n const defer = new Defer();\n\n this.cache[key] = defer.promise;\n\n try {\n const source = normalizePath(join(this.run.input, file)) as AbsolutePath;\n const raw = await this.run.read(source);\n const vars = this.run.vars.for(file, from);\n\n const context = this.loaderContext(file, raw, vars, this.proxy(key));\n const content = await loader.call(context, raw);\n\n // At this point all internal states are fully resolved.\n // So we don't expect Defer here.\n const meta = context.api.meta.get() as Meta;\n\n await getHooks(this).Loaded.promise(raw, meta, file);\n\n this.run.meta.addMetadata(file, vars.__metadata);\n this.run.meta.addSystemVars(file, vars.__system);\n this.run.meta.add(file, meta);\n\n this.cache[key] = content;\n defer.resolve(content);\n\n // TODO: this may trigger uncaught exceptions\n // But if we move this two lines above, then program exits unexpectedly\n await getHooks(this).Resolved.promise(content, file);\n } catch (error) {\n defer.reject(error);\n }\n\n return defer.promise;\n }\n\n @bounded async dump(file: NormalizedPath, markdown?: string) {\n const vfile = new VFile<string, EntryInfo>(file, markdown || (await this.load(file)));\n\n vfile.info = {title: '', headings: []};\n\n await getHooks(this).Dump.promise(vfile);\n\n return vfile;\n }\n\n async meta(path: RelativePath) {\n return this._meta(normalizePath(path));\n }\n\n async deps(path: RelativePath) {\n return this._deps(normalizePath(path));\n }\n\n async graph(path: RelativePath) {\n return this._graph(normalizePath(path));\n }\n\n async relations(path: RelativePath) {\n return this._relations(normalizePath(path));\n }\n\n async assets(path: RelativePath) {\n return this._assets(normalizePath(path));\n }\n\n async headings(path: RelativePath) {\n return this._headings(normalizePath(path));\n }\n\n async titles(path: RelativePath) {\n const file = normalizePath(path);\n\n const titles: Hash<string> = {};\n\n try {\n const headings = await this.headings(file);\n const contents = headings.map(({content}) => content);\n\n for (const content of contents) {\n const {level, title, anchors} = parseHeading(content);\n\n if (level === 1 && !titles['#']) {\n titles['#'] = title;\n }\n\n for (const anchor of anchors) {\n titles[anchor] = title;\n }\n }\n } catch {\n // This is acceptable.\n // If this is a real file and someone depends on his titles,\n // then we throw exception in md plugin.\n }\n\n return titles;\n }\n\n @bounded async inspect(path: RelativePath, raw: string, vars: Hash) {\n const file = normalizePath(path);\n const api = new LoaderAPI();\n const context = this.loaderContext(file, raw, vars, api);\n const content = await loader.call(context, raw);\n\n const deps = api.deps.get();\n const assets = [...api.assets.get()];\n\n return {content, deps, assets};\n }\n\n remap(path: RelativePath, line: number): number {\n const file = normalizePath(path);\n const sourcemap = this.pathToSourcemap.get(file);\n\n if (!sourcemap) {\n return line;\n }\n\n return Number(sourcemap[line]) || line;\n }\n\n release(path: NormalizedPath, from?: NormalizedPath) {\n const key = hash(path, from);\n\n delete this.cache[key];\n this.pathToDeps.delete(key);\n this.pathToMeta.delete(key);\n this.pathToAssets.delete(key);\n this.pathToHeadings.delete(key);\n this.pathToComments.delete(key);\n this.pathToSourcemap.delete(key);\n }\n\n private async _meta(file: NormalizedPath, from?: NormalizedPath) {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n return this.pathToMeta.get(key);\n }\n\n private async _deps(file: NormalizedPath, from?: NormalizedPath): Promise<IncludeInfo[]> {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n const deps = this.pathToDeps.get(key) || [];\n const internals: IncludeInfo[][] = await all(\n (this.pathToDeps.get(key) || []).map(async ({path}) => {\n return this._deps(path, from || file);\n }),\n );\n\n return deps.concat(...internals);\n }\n\n private async _graph(path: NormalizedPath, from?: NormalizedPath): Promise<EntryGraph> {\n const key = hash(path, from);\n\n const content = await this.load(path, from);\n const assets = this.pathToAssets.get(key) || [];\n const deps = await all(\n (this.pathToDeps.get(key) || []).map(async (dep) => {\n return {\n ...dep,\n ...(await this._graph(dep.path, from || path)),\n };\n }),\n );\n\n return {path, content, deps, assets};\n }\n\n private async _relations(\n path: NormalizedPath,\n from?: NormalizedPath,\n ): Promise<Graph<GraphInfo>> {\n const key = hash(path, from);\n const graph = new Graph<GraphInfo>();\n\n graph.addNode(path, {type: 'entry'});\n\n await this.load(path, from);\n await all(\n (this.pathToDeps.get(key) || []).map(async (dep) => {\n graph.consume(await this._relations(dep.path, from || path));\n graph.setNodeData(dep.path, {type: 'source'});\n graph.addDependency(path, dep.path);\n }),\n );\n\n (this.pathToAssets.get(key) || []).map(async (asset) => {\n if (['image', 'video'].includes(asset.type)) {\n graph.addNode(asset.path);\n graph.setNodeData(asset.path, {type: 'resource'});\n graph.addDependency(path, asset.path);\n }\n\n if (['link'].includes(asset.type) && asset.autotitle) {\n graph.addNode(asset.path);\n graph.setNodeData(asset.path, {type: 'source'});\n graph.addDependency(path, asset.path);\n }\n });\n\n const meta = this.run.meta.get(path);\n const resources = ([] as string[]).concat(meta.script || [], meta.style || []);\n for (const resource of resources) {\n const file = normalizePath(join(dirname(path), resource));\n graph.addNode(file);\n graph.setNodeData(file, {type: 'resource'});\n graph.addDependency(path, file);\n }\n\n return graph;\n }\n\n private async _assets(file: NormalizedPath, from?: NormalizedPath) {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n const assets = this.pathToAssets.get(key) || [];\n const internals: AssetInfo[][] = await all(\n (this.pathToDeps.get(key) || []).map(async ({path}) => {\n return this._assets(path, from || file);\n }),\n );\n\n return assets.concat(...internals);\n }\n\n private async _headings(file: NormalizedPath, from?: NormalizedPath) {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n const headings = this.pathToHeadings.get(key) || [];\n const internals: HeadingInfo[][] = await all(\n (this.pathToDeps.get(key) || []).map(async ({path, location}) => {\n const headings = await this._headings(path, from || file);\n return headings.map((heading) => ({...heading, location}));\n }),\n );\n\n return headings.concat(...internals).sort(byLocation);\n }\n\n private proxy(key: string) {\n return {\n deps: this.pathToDeps.bind(key),\n assets: this.pathToAssets.bind(key),\n meta: this.pathToMeta.bind(key),\n comments: this.pathToComments.bind(key),\n headings: this.pathToHeadings.bind(key),\n sourcemap: this.pathToSourcemap.bind(key),\n };\n }\n\n private loaderContext(\n path: NormalizedPath,\n raw: string,\n vars: Hash,\n api?: Partial<LoaderAPI>,\n ): LoaderContext {\n return {\n path,\n vars,\n logger: this.logger,\n readFile: (path: RelativePath) => {\n return this.run.read(join(this.run.input, path));\n },\n emitFile: async (file: NormalizedPath, content: string) => {\n const rootPath = fullPath(file, path);\n await this.run.write(join(this.run.input, rootPath), content, true);\n },\n api: new LoaderAPI(api),\n collects: this.collects,\n sourcemap: new SourceMap(raw),\n settings: {\n substitutions: this.config.template.features.substitutions,\n conditions: this.config.template.features.conditions,\n conditionsInCode: this.config.template.scopes.code,\n keepNotVar: this.config.outputFormat === 'md',\n },\n options: {\n disableLiquid: !this.config.template.enabled,\n },\n mode: this.options.mode,\n };\n }\n}\n", "import type {LiquidContext, SourceMap} from '@diplodoc/liquid';\nimport type {Meta} from '~/core/meta';\nimport type {Logger} from '~/core/logger';\nimport type {Bucket} from '~/core/utils';\nimport type {AssetInfo, Collect, HeadingInfo, IncludeInfo, Location} from './types';\n\nimport {merge} from 'lodash';\n\nimport {bucket} from '~/core/utils';\n\nimport {mangleFrontMatter} from './loader/mangle-frontmatter';\nimport {templateContent} from './loader/template-content';\nimport {resolveComments} from './loader/resolve-comments';\nimport {resolveDependencies} from './loader/resolve-deps';\nimport {resolveAssets} from './loader/resolve-assets';\nimport {resolveHeadings} from './loader/resolve-headings';\nimport {resolveNoTranslate} from './loader/resolve-no-translate';\nimport {resolveBlockCodes} from './loader/resolve-code';\n\nexport enum TransformMode {\n Html = 'html',\n Md = 'md',\n}\n\nexport class LoaderAPI {\n blockCodes: Bucket<Location[]>;\n comments: Bucket<Location[]>;\n deps: Bucket<IncludeInfo[]>;\n assets: Bucket<AssetInfo[]>;\n meta: Bucket<Meta>;\n headings: Bucket<HeadingInfo[]>;\n sourcemap: Bucket<Record<number | string, string>>;\n\n constructor(proxy: Partial<LoaderAPI> = {}) {\n this.blockCodes = proxy.blockCodes || bucket();\n this.deps = proxy.deps || bucket();\n this.assets = proxy.assets || bucket();\n this.meta = proxy.meta || bucket();\n this.comments = proxy.comments || bucket();\n this.headings = proxy.headings || bucket();\n this.sourcemap = proxy.sourcemap || bucket();\n }\n}\n\nexport type LoaderContext = LiquidContext & {\n path: NormalizedPath;\n vars: Hash;\n logger: Logger;\n emitFile(path: NormalizedPath, content: string): Promise<void>;\n readFile(path: NormalizedPath): Promise<string>;\n collects: Collect[];\n api: LoaderAPI;\n sourcemap: SourceMap;\n options: {\n disableLiquid: boolean;\n };\n mode: 'build' | 'translate';\n};\n\nexport async function loader(this: LoaderContext, content: string) {\n content = mangleFrontMatter.call(this, content);\n content = resolveNoTranslate.call(this, content);\n content = templateContent.call(this, content);\n content = await applyCollectPlugins.call(this, content);\n content = resolveBlockCodes.call(this, content);\n content = resolveComments.call(this, content);\n content = resolveDependencies.call(this, content);\n content = resolveAssets.call(this, content);\n content = resolveHeadings.call(this, content);\n\n this.api.sourcemap.set(this.sourcemap.dump());\n\n return content;\n}\n\nasync function applyCollectPlugins(this: LoaderContext, content: string) {\n let meta = {};\n\n for (const collect of this.collects) {\n let result = await collect.call(this, content, {});\n\n if (Array.isArray(result)) {\n meta = merge(meta, result[1] || {});\n result = result[0] as string;\n }\n\n if (result !== undefined) {\n content = result as string;\n }\n }\n\n return content;\n}\n", "import type {LoaderContext} from '../loader';\n\nimport {extractFrontMatter, liquidJson} from '@diplodoc/liquid';\n\nfunction safeExtractFrontmatter(this: LoaderContext, content: string) {\n return extractFrontMatter(content, {json: true});\n}\n\nexport function mangleFrontMatter(this: LoaderContext, rawContent: string) {\n const {vars, options} = this;\n const {disableLiquid} = options;\n\n const [frontmatter, content, rawFrontmatter] = safeExtractFrontmatter.call(this, rawContent);\n\n if (!rawFrontmatter) {\n this.api.meta.set({});\n return rawContent;\n }\n\n if (disableLiquid) {\n this.api.meta.set(frontmatter);\n } else {\n this.api.meta.set(liquidJson.call(this, frontmatter, vars));\n }\n\n this.sourcemap.delete(1, rawFrontmatter);\n\n return content;\n}\n", "import type {LoaderContext} from '../loader';\n\nimport {liquidSnippet} from '@diplodoc/liquid';\n\nexport function templateContent(this: LoaderContext, rawContent: string) {\n const {vars, options} = this;\n const {disableLiquid} = options;\n\n if (disableLiquid) {\n return rawContent;\n }\n\n const content = liquidSnippet.call(this, rawContent, vars, this.sourcemap);\n\n return content;\n}\n", "import type {LoaderContext} from '../loader';\n\nexport function resolveComments(this: LoaderContext, content: string) {\n const COMMENTS_CONTENTS = /<!-{2,}[\\s\\S]*?-{2,}>/g;\n const comments = [];\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = COMMENTS_CONTENTS.exec(content))) {\n comments.push([match.index, COMMENTS_CONTENTS.lastIndex] as [number, number]);\n }\n\n this.api.comments.set(comments);\n\n return content;\n}\n", "import type {IncludeInfo} from '../types';\nimport type {LoaderContext} from '../loader';\n\nimport {parseLocalUrl, rebasePath} from '~/core/utils';\n\nimport {filterRanges, findLink} from '../utils';\n\nexport function resolveDependencies(this: LoaderContext, content: string) {\n const includes = [];\n const exclude = [...this.api.comments.get()];\n\n // Include example: {% include [createfolder](create-folder.md) %}\n // Regexp result: [createfolder](create-folder.md)\n const INCLUDE_CONTENTS = /{%\\s*include\\s*.+?%}/g;\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = INCLUDE_CONTENTS.exec(content))) {\n // Ugly workaround for include examples\n // TODO: rewrite all inspect code on markdown-it parsing with minimal set of plugins\n if (content[match.index - 1] === '`') {\n continue;\n }\n\n const link = findLink(match[0]) as string;\n // TODO: warn about non local urls\n const include = parseLocalUrl<IncludeInfo>(link);\n\n if (include) {\n include.path = rebasePath(this.path, include.path as RelativePath);\n include.link = link;\n include.match = content.slice(match.index, INCLUDE_CONTENTS.lastIndex);\n include.location = [match.index, INCLUDE_CONTENTS.lastIndex];\n\n includes.push(include);\n }\n }\n\n this.api.deps.set(filterRanges(exclude, includes));\n\n return content;\n}\n", "import type {AssetInfo, Location} from './types';\nimport type {ImageOptions} from '@diplodoc/transform/lib/typings';\nimport type {ConstructorBlock, PageContent} from '@diplodoc/page-constructor-extension';\n\nimport {load as yamlLoad} from 'js-yaml';\n\nimport {MEDIA_FORMATS, parseLocalUrl, walkLinks} from '~/core/utils';\n\ntype AssetModifier = '!' | '@' | '';\n\nconst modifiers = {'!': 'image', '@': 'video', '': 'link'} as const;\n\nexport function findLink(content: string): string | undefined {\n const rx = /]\\(\\s*/g;\n const match = rx.exec(content);\n if (!match) {\n return undefined;\n }\n\n const link = parseLinkDestination(content, rx.lastIndex);\n\n if (link === null || link.match(/[${}]/)) {\n return undefined;\n }\n\n rx.lastIndex += link.length + 1;\n\n return link;\n}\n\nexport function extractImages(block: ConstructorBlock | string): string[] {\n const images: string[] = [];\n\n if (!block) {\n return images;\n }\n\n if (typeof block === 'string') {\n const trimmedBlock = block.trim();\n\n if (MEDIA_FORMATS.test(trimmedBlock) && trimmedBlock.split(/\\s+/).length === 1) {\n images.push(trimmedBlock);\n }\n\n return images;\n }\n\n walkLinks(block, (value) => {\n if (MEDIA_FORMATS.test(value) && value.split(/\\s+/).length === 1) {\n images.push(value);\n }\n });\n\n return images;\n}\n\nexport function parsePcBlocks(blocks: ConstructorBlock[] = [], images: string[] = []): string[] {\n for (const block of blocks) {\n images.push(...extractImages(block));\n }\n\n return images;\n}\n\nexport function getPcIconTitle(iconPath: string): string {\n const file = iconPath.split('/').pop() || iconPath;\n\n return file.replace(/\\.[^.]+$/, '');\n}\n\nexport function findPcImages(content: string): AssetInfo[] {\n const pcImages: AssetInfo[] = [];\n const openRegex = /^([ \\t]*):::\\s*page-constructor[ \\t]*\\r?\\n?/gm;\n\n let match: RegExpExecArray | null;\n\n while ((match = openRegex.exec(content))) {\n const indent = match[1] || '';\n const startIdx = openRegex.lastIndex;\n const closeRegex = new RegExp(`^${indent}:::[ \\\\t]*$`, 'mg');\n\n closeRegex.lastIndex = startIdx;\n\n const closeMatch = closeRegex.exec(content);\n\n if (!closeMatch) {\n continue;\n }\n\n const rawBlock = content.slice(startIdx, closeMatch.index);\n let data: PageContent;\n\n try {\n data = yamlLoad(rawBlock) as PageContent;\n } catch {\n continue;\n }\n\n const images = parsePcBlocks(data?.blocks as ConstructorBlock[], []);\n\n for (const img of images) {\n const parsed = parseLocalUrl(img);\n\n if (!parsed) {\n continue;\n }\n\n pcImages.push({\n ...parsed,\n type: 'image',\n subtype: 'image',\n title: getPcIconTitle(img),\n autotitle: false,\n hash: null,\n search: null,\n location: [match.index, closeRegex.lastIndex],\n // no inline svg inside page-constructor because we hasn't a location for asset\n options: {width: undefined, height: undefined, inline: false},\n });\n }\n\n openRegex.lastIndex = closeRegex.lastIndex;\n }\n\n return pcImages;\n}\n\nexport function findLinksInfo(content: string): AssetInfo[] {\n const links = find(/]\\(\\s*/g, content, (match, rx) => {\n const link = parseLinkDestination(content, rx.lastIndex);\n const title = parseLinkTitle(content, rx.lastIndex - match[0].length);\n const options = parseLinkOptions(content, rx.lastIndex + (link?.length || 0) + 1);\n\n // TODO: add more precise filter for unix compatible paths\n if (link === null || title === null || link.match(/[${}]/)) {\n return undefined;\n }\n\n const parsed = parseLocalUrl(link);\n if (!parsed) {\n return undefined;\n }\n\n const modifier = content[\n rx.lastIndex - match[0].length - title.length - 2\n ] as AssetModifier;\n const type = modifiers[modifier] || 'link';\n\n rx.lastIndex += link.length + 1;\n\n return {\n ...parsed,\n type,\n subtype: type === 'image' ? 'image' : null,\n title,\n autotitle: type === 'link' && (!title || title === '{#T}'),\n options,\n };\n });\n\n const referenceLinks = find(/]\\[\\s*/g, content, (match, rx) => {\n let link = parseLinkDestination(content, rx.lastIndex, ['[', ']']);\n let title = parseLinkTitle(content, rx.lastIndex - match[0].length);\n const options = parseLinkOptions(content, rx.lastIndex + (link?.length || 0) + 1);\n\n // TODO: add more precise filter for unix compatible paths\n if ((link === null && title === null) || link?.match(/[${}]/)) {\n return undefined;\n }\n title = title || '';\n link = link || title;\n\n const parsed = parseLocalUrl(link);\n if (!parsed) {\n return undefined;\n }\n\n const modifier = content[\n rx.lastIndex - match[0].length - title.length - 2\n ] as AssetModifier;\n const type = modifiers[modifier] || 'link';\n\n rx.lastIndex += (content[rx.lastIndex] === ']' ? 0 : link.length) + 1;\n\n return {\n ...parsed,\n type,\n subtype: 'reference',\n code: link,\n title,\n autotitle: type === 'link' && (!title || title === '{#T}'),\n options,\n };\n });\n\n return [...links, ...referenceLinks];\n}\n\nexport function findDefs(content: string): AssetInfo[] {\n return find(/^\\s*\\[(.*?)]:\\s*([^\\s]+)/gm, content, (match) => {\n const parsed = parseLocalUrl(match[2]);\n if (!parsed) {\n return undefined;\n }\n\n return {\n ...parsed,\n type: 'def',\n code: match[1] || undefined,\n title: '',\n autotitle: true,\n };\n });\n}\n\nfunction find(\n matcher: RegExp,\n content: string,\n map: (match: RegExpMatchArray, rx: RegExp) => Omit<AssetInfo, 'location'> | void,\n): AssetInfo[] {\n const links: AssetInfo[] = [];\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = matcher.exec(content))) {\n const result = map(match, matcher);\n if (!result) {\n continue;\n }\n\n if (result) {\n links.push({\n ...result,\n location: [match.index, matcher.lastIndex],\n });\n }\n }\n\n return links;\n}\n\nfunction parseLinkDestination(str: string, start: number, symbols = ['(', ')']) {\n const max = str.length;\n const [symbolStart, symbolEnd] = symbols.map((symbol) => symbol.charCodeAt(0));\n\n let code,\n level = 0,\n pos = start;\n\n if (str.charCodeAt(pos) === 0x3c /* < */) {\n return parseSimpleLink(str, start + 1);\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) {\n break;\n }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7f) {\n break;\n }\n\n if (code === 0x5c /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) {\n break;\n }\n pos += 2;\n continue;\n }\n\n if (code === symbolStart /* ( or [ */) {\n level++;\n if (level > 32) {\n return null;\n }\n }\n\n if (code === symbolEnd /* ) or ] */) {\n if (level === 0) {\n break;\n }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) {\n return null;\n }\n if (level !== 0) {\n return null;\n }\n\n return str.slice(start, pos);\n}\n\nfunction parseLinkTitle(str: string, start: number) {\n let code,\n prev,\n level = 0,\n pos = start;\n\n while (pos >= 0) {\n code = str.charCodeAt(pos);\n prev = str.charCodeAt(pos - 1);\n\n // ascii control characters\n if (code < 0x20 || code === 0x7f) {\n break;\n }\n\n if (prev === 0x5c /* \\ */) {\n pos -= 2;\n continue;\n }\n\n if (code === 93 /* ] */) {\n level++;\n if (level > 32) {\n return null;\n }\n }\n\n if (code === 91 /* [ */) {\n if (level === 1) {\n break;\n }\n level--;\n }\n\n pos--;\n }\n\n return str.slice(pos + 1, start);\n}\n\nfunction parseLinkOptions(str: string, start: number): ImageOptions {\n const max = str.length;\n const options: ImageOptions = {\n width: undefined,\n height: undefined,\n inline: undefined,\n };\n let code,\n level = 0,\n pos = start,\n startOption = start;\n\n if (str[pos - 1] !== ')') {\n level--;\n }\n if (str.charCodeAt(pos) !== 0x7b /* { */ && level === 0) {\n return options;\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x29 /* ) */ && level === -1) {\n if (str.charCodeAt(pos + 1) !== 0x7b) {\n return options;\n }\n level++;\n }\n\n if (code === 0x7b /* { */ && level > -1) {\n level++;\n startOption = pos + 1;\n if (level > 32) {\n return options;\n }\n }\n\n if (code === 0x7d /* } */) {\n if (level === 1) {\n level--;\n break;\n }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos || level !== 0) {\n return options;\n }\n\n const attrRegex = /(\\w+)=(?:'([^']*)'|\"([^\"]*)\"|(\\S+))/g;\n const optionsString = str.slice(startOption, pos);\n let match;\n\n while ((match = attrRegex.exec(optionsString)) !== null) {\n const key = match[1] as keyof ImageOptions;\n const value = match[2] || match[3] || match[4];\n\n if (key === 'inline') {\n options[key] = value === 'true';\n } else {\n options[key] = value;\n }\n }\n\n return options;\n}\n\nfunction parseSimpleLink(str: string, start: number) {\n const max = str.length;\n\n let code,\n pos = start;\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0a /* \\n */) {\n return null;\n }\n if (code === 0x3c /* < */) {\n return null;\n }\n if (code === 0x3e /* > */) {\n return str.slice(start, pos);\n }\n if (code === 0x5c /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return null;\n}\n\nexport function filterRanges<T extends {location: Location}>(\n excludes: Location[],\n infos: T[],\n): T[] {\n const contains = (exclude: Location, point: Location) => {\n return (\n (exclude[1] >= point[0] && exclude[1] <= point[1]) ||\n (exclude[0] >= point[0] && exclude[0] < point[1]) ||\n (exclude[0] < point[0] && exclude[1] >= point[1])\n );\n };\n\n return infos.filter((item) => {\n return !excludes.some((exclude) => contains(exclude, item.location));\n });\n}\n\nexport function parseHeading(content: string) {\n const anchors = [];\n const commonHeading = content.match(/^#+/);\n const alternateHeading = content[content.length - 1];\n const alternaleLevels = ['-', '='];\n const level = commonHeading\n ? commonHeading[0].length\n : alternaleLevels.indexOf(alternateHeading) + 1;\n\n if (commonHeading) {\n content = content.replace(/^#+\\s*/, '');\n } else {\n content = content.replace(/\\n[-=]+$/, '');\n }\n\n const ANCHOR = /[^[]{(#[^}]+)}/g;\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = ANCHOR.exec(content))) {\n anchors.push(match[1]);\n content = content.replace(match[0], '');\n ANCHOR.lastIndex -= match[0].length;\n }\n\n const title = content.trim();\n\n return {anchors, title, level};\n}\n", "import type {LoaderContext} from '../loader';\nimport type {AssetInfo} from '../types';\n\nimport {rebasePath} from '~/core/utils';\n\nimport {filterRanges, findDefs, findLinksInfo, findPcImages} from '../utils';\n\nexport function resolveAssets(this: LoaderContext, content: string) {\n const assets: AssetInfo[] = [];\n\n const exclude = [\n ...this.api.deps.get().map(({location}) => location),\n ...this.api.comments.get(),\n ...this.api.blockCodes.get(),\n ];\n\n const defs = filterRanges(exclude, findDefs(content));\n const links = filterRanges(exclude, findLinksInfo(content));\n const pcImages = filterRanges(exclude, findPcImages(content));\n\n for (const info of [...defs, ...links, ...pcImages]) {\n try {\n if (info.path !== null) {\n info.path = rebasePath(this.path, decodeURIComponent(info.path) as RelativePath);\n }\n\n assets.push(info);\n } catch (error) {\n this.logger.error(`Error processing asset from ${this.path} to ${info.path}: ${error}`);\n }\n }\n\n this.api.assets.set([...assets]);\n\n return content;\n}\n", "import type {Location} from '../types';\nimport type {LoaderContext} from '../loader';\n\nimport {filterRanges} from '../utils';\n\nexport function resolveHeadings(this: LoaderContext, content: string) {\n const headings = [];\n const exclude = [...this.api.comments.get()];\n\n const heading = /(?<=^|\\n)([#=-])/g;\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = heading.exec(content))) {\n const [result, location] =\n match[1] === '#'\n ? findCommonHeading(match.index, content)\n : findAlternateHeading(match.index, content);\n\n if (result) {\n headings.push({content: result, location});\n heading.lastIndex = location[1];\n }\n }\n\n this.api.headings.set(filterRanges(exclude, headings));\n\n return content;\n}\n\nconst SPACE = /[ \\t]/;\n\nfunction findCommonHeading(start: number, content: string): [string, Location] | never[] {\n let title = '';\n\n let index = start;\n while (index < content.length) {\n if (index - start > 6) {\n return [];\n }\n\n if (content[index] === '#') {\n index++;\n } else if (content[index].match(SPACE)) {\n break;\n } else {\n return [];\n }\n }\n\n while (index < content.length) {\n if (content[index + 1] && content[index] !== '\\n') {\n title += content[index];\n index++;\n } else if (title.trim()) {\n return [content.slice(start, index), [start, index]];\n } else {\n return [];\n }\n }\n\n return [];\n}\n\nfunction findAlternateHeading(start: number, content: string): [string, Location] | never[] {\n const delim = content[start];\n const newline = [];\n\n let title = '';\n\n let end = start;\n while (end < content.length) {\n if (content[end] === delim) {\n end++;\n } else if (content[end] === '\\n' || !content[end + 1]) {\n break;\n } else {\n return [];\n }\n }\n\n let index = start - 1;\n while (index >= 0) {\n const isContentStart = !index;\n const isTitleStart = newline.length === 2 && !content.slice(...newline).trim();\n\n if (newline.length && !isTitleStart) {\n newline.length = 1;\n }\n\n if (!isTitleStart) {\n title = content[index] + title;\n }\n\n if (isContentStart || isTitleStart) {\n const clean = title.trimStart();\n if (clean) {\n return [content.slice(start - clean.length, end), [start - clean.length, end]];\n } else {\n return [];\n }\n }\n\n if (content[index] === '\\n') {\n newline.unshift(index);\n }\n\n index--;\n }\n\n return [];\n}\n", "import type {LoaderContext} from '../loader';\n\nexport function resolveNoTranslate(this: LoaderContext, content: string) {\n if (this.mode === 'translate') {\n return content;\n }\n\n content = resolveContainerDirectives(content);\n\n content = resolveLeafBlockDirectives(content);\n\n content = resolveInlineDirectives(content);\n\n return content;\n}\n\nfunction resolveContainerDirectives(content: string): string {\n const lines = content.split('\\n');\n const result = [];\n\n const stack = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.trim().startsWith(':::')) {\n const directiveLine = line.trim();\n\n if (directiveLine === ':::') {\n if (stack.length > 0) {\n const lastDirective = stack.pop();\n\n if (lastDirective === 'no-translate' && stack.length === 0) {\n continue;\n }\n\n result.push(line);\n }\n } else {\n const directiveMatch = directiveLine.match(/^:::\\s*([^\\s]+)/);\n const directiveName = directiveMatch ? directiveMatch[1] : '';\n\n if (directiveName === 'no-translate') {\n stack.push('no-translate');\n continue;\n } else {\n stack.push(directiveName);\n result.push(line);\n }\n }\n } else {\n result.push(line);\n }\n }\n\n return result.join('\\n');\n}\n\nfunction resolveLeafBlockDirectives(content: string): string {\n const blockRegex = /::\\s*no-translate\\s*\\[([\\s\\S]*?)\\]/g;\n\n return content.replace(blockRegex, (_, innerContent) => {\n return innerContent;\n });\n}\n\nfunction resolveInlineDirectives(content: string): string {\n const inlineRegex = /(?<![:]):no-translate\\s*\\[([\\s\\S]*?)\\]/g;\n\n return content.replace(inlineRegex, (_, innerContent) => {\n return innerContent;\n });\n}\n", "import type {LoaderContext} from '../loader';\nimport type Token from 'markdown-it/lib/token';\n\nimport MarkdownIt from 'markdown-it';\n// @ts-ignore\n// import meta from 'markdown-it-meta';\n// @ts-ignore\n// import sup from 'markdown-it-sup';\n// @ts-ignore\nimport deflist from 'markdown-it-deflist';\n// import cut from '@diplodoc/transform/lib/plugins/cut';\n// import checkbox from '@diplodoc/transform/lib/plugins/checkbox';\n// import monospace from '@diplodoc/transform/lib/plugins/monospace';\n// import imsize from '@diplodoc/transform/lib/plugins/imsize';\n// import file from '@diplodoc/transform/lib/plugins/file';\n// import video from '@diplodoc/transform/lib/plugins/video';\nimport yfmTable from '@diplodoc/transform/lib/plugins/table';\n\nfunction computeLineStarts(lines: string[]): number[] {\n const lineStarts: number[] = [0];\n for (let i = 1; i < lines.length; i++) {\n // const lineEndingLength = lines[i - 1].endsWith('\\r') ? 2 : 1;\n lineStarts[i] = lineStarts[i - 1] + lines[i - 1].length + 1;\n }\n return lineStarts;\n}\n\nconst lineToCharPosition = (line: number, lineStarts: number[], content: string): number =>\n line >= lineStarts.length ? content.length : lineStarts[line];\n\nfunction calculateAdjustedEnd(\n endLine: number,\n lineStarts: number[],\n lines: string[],\n content: string,\n): number {\n let end = content.length;\n if (endLine <= lineStarts.length) {\n end = endLine === 0 ? 0 : lineStarts[endLine - 1] + lines[endLine - 1].length;\n }\n return endLine <= lines.length && endLine > 0 ? end + 1 : end;\n}\n\n// Process block code tokens (fence and code_block)\nfunction processBlockCode(\n token: Token,\n lineStarts: number[],\n lines: string[],\n content: string,\n codes: Array<[number, number]>,\n) {\n if (!token.map || token.map.length !== 2) {\n return;\n }\n\n const [startLine, endLine] = token.map;\n\n const start = lineToCharPosition(startLine, lineStarts, content);\n\n let adjustedEnd: number;\n if (token.type === 'fence' && endLine <= lines.length) {\n const endLineContent = lines[endLine - 1] || '';\n const fenceEndIndex = endLineContent.indexOf(token.markup);\n if (fenceEndIndex > -1) {\n const lineStart = lineStarts[endLine - 1] || 0;\n const fenceEndPos = lineStart + fenceEndIndex + token.markup.length;\n adjustedEnd = fenceEndPos;\n } else {\n adjustedEnd = calculateAdjustedEnd(endLine, lineStarts, lines, content);\n }\n } else {\n adjustedEnd = calculateAdjustedEnd(endLine, lineStarts, lines, content);\n }\n\n codes.push([start, adjustedEnd]);\n}\n\n// Check specific attribute in image part\nfunction checkAttribute(\n imagePart: string,\n matchStart: number,\n codeText: string | null,\n start: number | undefined,\n end: number | undefined,\n regex: RegExp,\n getAttrStart: (matchStart: number, imagePart: string) => number,\n): boolean {\n const match = imagePart.match(regex);\n if (match) {\n if (codeText !== null) {\n // Check if code text is in attributes\n if (match[1].includes(codeText)) {\n return true;\n }\n } else if (start !== undefined && end !== undefined) {\n // Check if code range falls within attributes\n const attrStart = getAttrStart(matchStart, imagePart);\n const attrEnd = attrStart + match[0].length;\n if (start >= attrStart && end <= attrEnd) {\n return true;\n }\n }\n }\n return false;\n}\n\n// Check attributes in image part\nfunction checkImageAttributes(\n imagePart: string,\n matchStart: number,\n codeText: string | null,\n start?: number,\n end?: number,\n): {braceMatch: boolean; quoteMatch: boolean} {\n // Check attributes in curly braces {...}\n const braceMatch = checkAttribute(\n imagePart,\n matchStart,\n codeText,\n start,\n end,\n /\\s*{([^}]*)}/,\n (matchStart, imagePart) => matchStart + imagePart.indexOf('{'),\n );\n\n // Check title attribute in quotes \"...\"\n const quoteMatch = checkAttribute(\n imagePart,\n matchStart,\n codeText,\n start,\n end,\n /\\s*\"([^\"]*)\"/,\n (matchStart, imagePart) => matchStart + imagePart.indexOf('\"'),\n );\n\n return {braceMatch, quoteMatch};\n}\n\n// Add code to array and update position\nfunction addCodeAndUpdatePosition(\n startIndex: number,\n endIndex: number,\n content: string,\n codes: Array<[number, number]>,\n parentStartPos: number,\n): number {\n // Check if this code is inside image attributes\n const insideAttrs = isInsideImageAttributes(content, startIndex, endIndex);\n if (!insideAttrs) {\n codes.push([startIndex, endIndex]);\n }\n\n // Update parentStartPos to avoid finding the same match again\n return insideAttrs ? parentStartPos : Math.max(parentStartPos, endIndex);\n}\n\n// Process inline code tokens\nfunction processInlineCode(\n token: Token,\n content: string,\n parentStartPos: number,\n codes: Array<[number, number]>,\n lineStarts: number[],\n lines: string[],\n): number {\n if (!token.markup || !token.content) {\n return parentStartPos;\n }\n\n // Use token's position information if available\n if (token.map && token.map.length === 2) {\n const [startLine, _endLine] = token.map;\n const start = lineToCharPosition(startLine, lineStarts, content);\n\n // Find the exact position of the inline code within the line\n const lineContent = lines[startLine] || '';\n const searchPattern = token.markup + token.content + token.markup;\n const patternIndex = lineContent.indexOf(searchPattern);\n\n if (patternIndex !== -1) {\n const startIndex = start + patternIndex;\n const endIndex = startIndex + searchPattern.length;\n\n return addCodeAndUpdatePosition(startIndex, endIndex, content, codes, parentStartPos);\n }\n } else {\n const searchPattern = token.markup + token.content + token.markup;\n const startIndex = content.indexOf(searchPattern, parentStartPos);\n\n if (startIndex !== -1) {\n const endIndex = startIndex + searchPattern.length;\n\n return addCodeAndUpdatePosition(startIndex, endIndex, content, codes, parentStartPos);\n }\n }\n\n return parentStartPos;\n}\n\n// Function to check if code is inside image attributes\nfunction isInsideImageAttributes(content: string, start: number, end: number): boolean {\n // Regular expression to find images with attributes\n // Looking for pattern ![...](...) with optional \"title\" and/or {...} attributes\n // Considering multiline images with 's' flag (dotAll)\n const imageRegex = /!\\[[^\\]]*\\]\\([^)]*\\)(?:\\s*\"[^\"]*\")?(?:\\s*{[^}]*})?/gs;\n\n // First check if code is inside attributes of a specific image\n let match;\n while ((match = imageRegex.exec(content)) !== null) {\n // Start and end of the entire match\n const matchStart = match.index;\n const matchEnd = match.index + match[0].length;\n\n // Check if code range falls within this match\n if (start >= matchStart && end <= matchEnd) {\n // Now check if code is in attributes\n const imagePart = match[0];\n const {braceMatch, quoteMatch} = checkImageAttributes(\n imagePart,\n matchStart,\n null,\n start,\n end,\n );\n if (braceMatch || quoteMatch) {\n return true;\n }\n }\n }\n\n // Additional check: if code is in attributes of any image in the document,\n // then it should not be marked as code block\n const codeContent = content.substring(start, end);\n const codeText = codeContent.replace(/`/g, ''); // Remove backticks\n\n // Find all images in the document\n const allImagesRegex = /!\\[[^\\]]*\\]\\([^)]*\\)(?:\\s*\"[^\"]*\")?(?:\\s*{[^}]*})?/gs;\n let imageMatch;\n while ((imageMatch = allImagesRegex.exec(content)) !== null) {\n // Check if code is in image attributes\n const imagePart = imageMatch[0];\n const {braceMatch, quoteMatch} = checkImageAttributes(\n imagePart,\n imageMatch.index,\n codeText,\n );\n if (braceMatch || quoteMatch) {\n return true;\n }\n }\n\n // Additional check for YFM tables: if code is in one table cell,\n // and image in another cell of the same row, then code should not be marked as code block\n // Check if code is in YFM table context\n const lines = content.split('\\n');\n let lineIndex = 0;\n let charCount = 0;\n\n // Find the line where the code is located\n for (let i = 0; i < lines.length; i++) {\n if (charCount <= start && start < charCount + lines[i].length + 1) {\n lineIndex = i;\n break;\n }\n charCount += lines[i].length + 1;\n }\n\n // Check if line is in YFM table context\n if (lineIndex > 0 && lineIndex < lines.length - 1) {\n const prevLine = lines[lineIndex - 1];\n const currentLine = lines[lineIndex];\n const nextLine = lines[lineIndex + 1];\n\n // Check if previous line is table start\n if (prevLine.trim().startsWith('#|')) {\n // Check if next line is table end\n if (nextLine.trim().startsWith('|#')) {\n // Check if current line contains image\n if (currentLine.includes('![') && currentLine.includes('](')) {\n // In YFM table, if code is in one cell and image in another,\n // then code should not be marked as code block\n // We need to check if code is in the same line as image\n return true;\n }\n }\n }\n }\n\n return false;\n}\n\n// Process inline tokens that may contain inline code\nfunction processInlineToken(\n token: Token,\n lineStarts: number[],\n content: string,\n parentStartPos: number,\n): number {\n if (!token.children || token.children.length === 0) {\n return parentStartPos;\n }\n\n let inlineStartPos = parentStartPos;\n if (token.map && token.map.length === 2) {\n const [startLine] = token.map;\n inlineStartPos = lineToCharPosition(startLine, lineStarts, content);\n }\n\n return inlineStartPos;\n}\n\nexport function resolveBlockCodes(this: LoaderContext, content: string) {\n const md = new MarkdownIt({html: true});\n const diplodocOptions = {\n notesAutotitle: false,\n path: '',\n };\n\n // md.disable('text_join');\n // md.disable('entity');\n\n // md.use(meta, diplodocOptions);\n // md.use(cut, diplodocOptions);\n // md.use(sup, diplodocOptions);\n md.use(deflist, diplodocOptions);\n // md.use(checkbox, diplodocOptions);\n // md.use(monospace, diplodocOptions);\n // md.use(imsize, diplodocOptions);\n // md.use(file, diplodocOptions);\n // md.use(video, diplodocOptions);\n md.use(yfmTable, diplodocOptions);\n\n const tokens = md.parse(content, {});\n\n const codes: Array<[number, number]> = [];\n\n const lines = content.split('\\n');\n const lineStarts = computeLineStarts(lines);\n\n function extractCodeBlocks(\n tokens: Token[],\n parentStartPos = 0,\n parentType: string | null = null,\n ) {\n for (const token of tokens) {\n let currentParentStartPos = parentStartPos;\n\n if (token.type === 'fence' || token.type === 'code_block') {\n processBlockCode(token, lineStarts, lines, content, codes);\n } else if (token.type === 'inline') {\n currentParentStartPos = processInlineToken(\n token,\n lineStarts,\n content,\n parentStartPos,\n );\n\n if (token.children && token.children.length > 0) {\n extractCodeBlocks(token.children, currentParentStartPos, token.type);\n }\n\n continue;\n } else if (token.type === 'code_inline') {\n // Skip code_inline tokens that are children of image tokens\n if (parentType !== 'image') {\n currentParentStartPos = processInlineCode(\n token,\n content,\n parentStartPos,\n codes,\n lineStarts,\n lines,\n );\n }\n }\n\n if (token.children && token.children.length > 0 && token.type !== 'inline') {\n extractCodeBlocks(token.children, currentParentStartPos, token.type);\n }\n }\n }\n\n extractCodeBlocks(tokens);\n\n this.api.blockCodes.set(codes);\n\n return content;\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_liquid", "import_utils", "import_utils", "import_liquid", "import_utils", "import_utils", "yamlLoad", "import_utils", "matchStart", "imagePart", "MarkdownIt", "deflist", "yfmTable", "tokens", "headings", "path"]
4
+ "sourcesContent": ["export * from './types';\n\nexport {getHooks} from './hooks';\nexport {MarkdownService} from './MarkdownService';\n", "import type {VFile} from '~/core/utils';\nimport type {Collect, Plugin} from './types';\nimport type {Meta} from '~/core/meta';\n\nimport {AsyncSeriesHook, AsyncSeriesWaterfallHook} from 'tapable';\n\nimport {generateHooksAccess} from '~/core/utils';\n\nexport function hooks(name: string) {\n return {\n Collects: new AsyncSeriesWaterfallHook<[Collect[]]>(['collects'], `${name}.Collects`),\n Plugins: new AsyncSeriesWaterfallHook<[Plugin[]]>(['plugins'], `${name}.Plugins`),\n Loaded: new AsyncSeriesHook<[string, DeepFrozen<Meta>, NormalizedPath]>(\n ['markdown', 'meta', 'path'],\n `${name}.Loaded`,\n ),\n Resolved: new AsyncSeriesHook<[string, NormalizedPath]>(\n ['markdown', 'path'],\n `${name}.Resolved`,\n ),\n Dump: new AsyncSeriesHook<VFile<string>>(['vfile'], `${name}.Dump`),\n };\n}\n\nconst [getHooks, withHooks] = generateHooksAccess('Markdown', hooks);\n\nexport {getHooks, withHooks};\n", "import type {Run as BaseRun} from '~/core/run';\nimport type {VarsService} from '~/core/vars';\nimport type {Meta, MetaService} from '~/core/meta';\nimport type {LoaderContext, TransformMode} from './loader';\nimport type {\n AssetInfo,\n Collect,\n EntryGraph,\n EntryInfo,\n GraphInfo,\n HeadingInfo,\n IncludeInfo,\n Location,\n Plugin,\n} from './types';\n\nimport {dirname, join} from 'node:path';\nimport {SourceMap} from '@diplodoc/liquid';\n\nimport {Buckets, Defer, Graph, VFile, all, bounded, fullPath, normalizePath} from '~/core/utils';\n\nimport {getHooks, withHooks} from './hooks';\nimport {LoaderAPI, loader} from './loader';\nimport {parseHeading} from './utils';\n\ntype MarkdownServiceConfig = {\n outputFormat: `${TransformMode}`;\n template: {\n enabled: boolean;\n features: {\n substitutions: boolean;\n conditions: boolean;\n };\n scopes: {\n code: boolean;\n };\n };\n};\n\ntype Run = BaseRun<MarkdownServiceConfig> & {\n meta: MetaService;\n vars: VarsService;\n};\n\ntype Options = {\n mode: 'build' | 'translate';\n};\n\nfunction hash(path: NormalizedPath, from?: NormalizedPath) {\n return `${path}${from ? '+' + from : ''}`;\n}\n\nconst byLocation = (a: HeadingInfo, b: HeadingInfo) => a.location[0] - b.location[0];\n\n@withHooks\nexport class MarkdownService {\n readonly name = 'Markdown';\n\n get logger() {\n return this.run.logger;\n }\n\n get plugins() {\n return this._plugins.slice();\n }\n\n get collects() {\n return this._collects.slice();\n }\n\n get config() {\n return this.run.config;\n }\n\n private run: Run;\n\n private _collects: Collect[] = [];\n\n private _plugins: Plugin[] = [];\n\n private pathToMeta = new Buckets<Meta>();\n\n private pathToComments = new Buckets<Location[]>();\n\n private pathToDeps = new Buckets<IncludeInfo[]>();\n\n private pathToAssets = new Buckets<AssetInfo[]>();\n\n private pathToHeadings = new Buckets<HeadingInfo[]>();\n\n private pathToSourcemap = new Buckets<Record<number | string, string>>();\n\n private cache: Hash<Promise<string> | string> = {};\n\n private options;\n\n constructor(run: Run, options: Options = {mode: 'build'}) {\n this.run = run;\n this.options = options;\n }\n\n @bounded async init() {\n this._collects = await getHooks(this).Collects.promise(this._collects);\n this._plugins = await getHooks(this).Plugins.promise(this._plugins);\n }\n\n @bounded async load(path: RelativePath, from?: NormalizedPath) {\n const file = normalizePath(path);\n const key = hash(file, from);\n\n if (key in this.cache) {\n return this.cache[key];\n }\n\n const defer = new Defer();\n\n this.cache[key] = defer.promise;\n\n try {\n const source = normalizePath(join(this.run.input, file)) as AbsolutePath;\n const raw = await this.run.read(source);\n const vars = this.run.vars.for(file, from);\n\n const context = this.loaderContext(file, raw, vars, this.proxy(key));\n const content = await loader.call(context, raw);\n\n // At this point all internal states are fully resolved.\n // So we don't expect Defer here.\n const meta = context.api.meta.get() as Meta;\n\n await getHooks(this).Loaded.promise(raw, meta, file);\n\n this.run.meta.addMetadata(file, vars.__metadata);\n this.run.meta.addSystemVars(file, vars.__system);\n this.run.meta.add(file, meta);\n\n this.cache[key] = content;\n defer.resolve(content);\n\n // TODO: this may trigger uncaught exceptions\n // But if we move this two lines above, then program exits unexpectedly\n await getHooks(this).Resolved.promise(content, file);\n } catch (error) {\n defer.reject(error);\n }\n\n return defer.promise;\n }\n\n @bounded async dump(file: NormalizedPath, markdown?: string) {\n const vfile = new VFile<string, EntryInfo>(file, markdown || (await this.load(file)));\n\n vfile.info = {title: '', headings: []};\n\n await getHooks(this).Dump.promise(vfile);\n\n return vfile;\n }\n\n async meta(path: RelativePath) {\n return this._meta(normalizePath(path));\n }\n\n async deps(path: RelativePath) {\n return this._deps(normalizePath(path));\n }\n\n async graph(path: RelativePath) {\n return this._graph(normalizePath(path));\n }\n\n async relations(path: RelativePath) {\n return this._relations(normalizePath(path));\n }\n\n async assets(path: RelativePath) {\n return this._assets(normalizePath(path));\n }\n\n async headings(path: RelativePath) {\n return this._headings(normalizePath(path));\n }\n\n async titles(path: RelativePath) {\n const file = normalizePath(path);\n\n const titles: Hash<string> = {};\n\n try {\n const headings = await this.headings(file);\n const contents = headings.map(({content}) => content);\n\n for (const content of contents) {\n const {level, title, anchors} = parseHeading(content);\n\n if (level === 1 && !titles['#']) {\n titles['#'] = title;\n }\n\n for (const anchor of anchors) {\n titles[anchor] = title;\n }\n }\n } catch {\n // This is acceptable.\n // If this is a real file and someone depends on his titles,\n // then we throw exception in md plugin.\n }\n\n return titles;\n }\n\n @bounded async inspect(path: RelativePath, raw: string, vars: Hash) {\n const file = normalizePath(path);\n const api = new LoaderAPI();\n const context = this.loaderContext(file, raw, vars, api);\n const content = await loader.call(context, raw);\n\n const deps = api.deps.get();\n const assets = [...api.assets.get()];\n\n return {content, deps, assets};\n }\n\n remap(path: RelativePath, line: number): number {\n const file = normalizePath(path);\n const sourcemap = this.pathToSourcemap.get(file);\n\n if (!sourcemap) {\n return line;\n }\n\n return Number(sourcemap[line]) || line;\n }\n\n release(path: NormalizedPath, from?: NormalizedPath) {\n const key = hash(path, from);\n\n delete this.cache[key];\n this.pathToDeps.delete(key);\n this.pathToMeta.delete(key);\n this.pathToAssets.delete(key);\n this.pathToHeadings.delete(key);\n this.pathToComments.delete(key);\n this.pathToSourcemap.delete(key);\n }\n\n private async _meta(file: NormalizedPath, from?: NormalizedPath) {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n return this.pathToMeta.get(key);\n }\n\n private async _deps(file: NormalizedPath, from?: NormalizedPath): Promise<IncludeInfo[]> {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n const deps = this.pathToDeps.get(key) || [];\n const internals: IncludeInfo[][] = await all(\n (this.pathToDeps.get(key) || []).map(async ({path}) => {\n return this._deps(path, from || file);\n }),\n );\n\n return deps.concat(...internals);\n }\n\n private async _graph(path: NormalizedPath, from?: NormalizedPath): Promise<EntryGraph> {\n const key = hash(path, from);\n\n const content = await this.load(path, from);\n const assets = this.pathToAssets.get(key) || [];\n const deps = await all(\n (this.pathToDeps.get(key) || []).map(async (dep) => {\n return {\n ...dep,\n ...(await this._graph(dep.path, from || path)),\n };\n }),\n );\n\n return {path, content, deps, assets};\n }\n\n private async _relations(\n path: NormalizedPath,\n from?: NormalizedPath,\n ): Promise<Graph<GraphInfo>> {\n const key = hash(path, from);\n const graph = new Graph<GraphInfo>();\n\n graph.addNode(path, {type: 'entry'});\n\n await this.load(path, from);\n await all(\n (this.pathToDeps.get(key) || []).map(async (dep) => {\n graph.consume(await this._relations(dep.path, from || path));\n graph.setNodeData(dep.path, {type: 'source'});\n graph.addDependency(path, dep.path);\n }),\n );\n\n (this.pathToAssets.get(key) || []).map(async (asset) => {\n if (['image', 'video'].includes(asset.type)) {\n graph.addNode(asset.path);\n graph.setNodeData(asset.path, {type: 'resource'});\n graph.addDependency(path, asset.path);\n }\n\n if (['link'].includes(asset.type) && asset.autotitle) {\n graph.addNode(asset.path);\n graph.setNodeData(asset.path, {type: 'source'});\n graph.addDependency(path, asset.path);\n }\n });\n\n const meta = this.run.meta.get(path);\n const resources = ([] as string[]).concat(meta.script || [], meta.style || []);\n for (const resource of resources) {\n const file = normalizePath(join(dirname(path), resource));\n graph.addNode(file);\n graph.setNodeData(file, {type: 'resource'});\n graph.addDependency(path, file);\n }\n\n return graph;\n }\n\n private async _assets(file: NormalizedPath, from?: NormalizedPath) {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n const assets = this.pathToAssets.get(key) || [];\n const internals: AssetInfo[][] = await all(\n (this.pathToDeps.get(key) || []).map(async ({path}) => {\n return this._assets(path, from || file);\n }),\n );\n\n return assets.concat(...internals);\n }\n\n private async _headings(file: NormalizedPath, from?: NormalizedPath) {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n const headings = this.pathToHeadings.get(key) || [];\n const internals: HeadingInfo[][] = await all(\n (this.pathToDeps.get(key) || []).map(async ({path, location}) => {\n const headings = await this._headings(path, from || file);\n return headings.map((heading) => ({...heading, location}));\n }),\n );\n\n return headings.concat(...internals).sort(byLocation);\n }\n\n private proxy(key: string) {\n return {\n deps: this.pathToDeps.bind(key),\n assets: this.pathToAssets.bind(key),\n meta: this.pathToMeta.bind(key),\n comments: this.pathToComments.bind(key),\n headings: this.pathToHeadings.bind(key),\n sourcemap: this.pathToSourcemap.bind(key),\n };\n }\n\n private loaderContext(\n path: NormalizedPath,\n raw: string,\n vars: Hash,\n api?: Partial<LoaderAPI>,\n ): LoaderContext {\n return {\n path,\n vars,\n logger: this.logger,\n readFile: (path: RelativePath) => {\n return this.run.read(join(this.run.input, path));\n },\n emitFile: async (file: NormalizedPath, content: string) => {\n const rootPath = fullPath(file, path);\n await this.run.write(join(this.run.input, rootPath), content, true);\n },\n api: new LoaderAPI(api),\n collects: this.collects,\n sourcemap: new SourceMap(raw),\n settings: {\n substitutions: this.config.template.features.substitutions,\n conditions: this.config.template.features.conditions,\n conditionsInCode: this.config.template.scopes.code,\n keepNotVar: this.config.outputFormat === 'md',\n },\n options: {\n disableLiquid: !this.config.template.enabled,\n },\n mode: this.options.mode,\n };\n }\n}\n", "import type {LiquidContext, SourceMap} from '@diplodoc/liquid';\nimport type {Meta} from '~/core/meta';\nimport type {Logger} from '~/core/logger';\nimport type {Bucket} from '~/core/utils';\nimport type {AssetInfo, Collect, HeadingInfo, IncludeInfo, Location} from './types';\n\nimport {merge} from 'lodash';\n\nimport {bucket} from '~/core/utils';\n\nimport {mangleFrontMatter} from './loader/mangle-frontmatter';\nimport {templateContent} from './loader/template-content';\nimport {resolveComments} from './loader/resolve-comments';\nimport {resolveDependencies} from './loader/resolve-deps';\nimport {resolveAssets} from './loader/resolve-assets';\nimport {resolveHeadings} from './loader/resolve-headings';\nimport {resolveNoTranslate} from './loader/resolve-no-translate';\nimport {resolveBlockCodes} from './loader/resolve-code';\n\nexport enum TransformMode {\n Html = 'html',\n Md = 'md',\n}\n\nexport class LoaderAPI {\n blockCodes: Bucket<Location[]>;\n comments: Bucket<Location[]>;\n deps: Bucket<IncludeInfo[]>;\n assets: Bucket<AssetInfo[]>;\n meta: Bucket<Meta>;\n headings: Bucket<HeadingInfo[]>;\n sourcemap: Bucket<Record<number | string, string>>;\n\n constructor(proxy: Partial<LoaderAPI> = {}) {\n this.blockCodes = proxy.blockCodes || bucket();\n this.deps = proxy.deps || bucket();\n this.assets = proxy.assets || bucket();\n this.meta = proxy.meta || bucket();\n this.comments = proxy.comments || bucket();\n this.headings = proxy.headings || bucket();\n this.sourcemap = proxy.sourcemap || bucket();\n }\n}\n\nexport type LoaderContext = LiquidContext & {\n path: NormalizedPath;\n vars: Hash;\n logger: Logger;\n emitFile(path: NormalizedPath, content: string): Promise<void>;\n readFile(path: NormalizedPath): Promise<string>;\n collects: Collect[];\n api: LoaderAPI;\n sourcemap: SourceMap;\n options: {\n disableLiquid: boolean;\n };\n mode: 'build' | 'translate';\n};\n\nexport async function loader(this: LoaderContext, content: string) {\n content = mangleFrontMatter.call(this, content);\n content = resolveNoTranslate.call(this, content);\n content = templateContent.call(this, content);\n content = await applyCollectPlugins.call(this, content);\n content = resolveBlockCodes.call(this, content);\n content = resolveComments.call(this, content);\n content = resolveDependencies.call(this, content);\n content = resolveAssets.call(this, content);\n content = resolveHeadings.call(this, content);\n\n this.api.sourcemap.set(this.sourcemap.dump());\n\n return content;\n}\n\nasync function applyCollectPlugins(this: LoaderContext, content: string) {\n let meta = {};\n\n for (const collect of this.collects) {\n let result = await collect.call(this, content, {});\n\n if (Array.isArray(result)) {\n meta = merge(meta, result[1] || {});\n result = result[0] as string;\n }\n\n if (result !== undefined) {\n content = result as string;\n }\n }\n\n return content;\n}\n", "import type {LoaderContext} from '../loader';\n\nimport {extractFrontMatter, liquidJson} from '@diplodoc/liquid';\n\nfunction safeExtractFrontmatter(this: LoaderContext, content: string) {\n return extractFrontMatter(content, {json: true});\n}\n\nexport function mangleFrontMatter(this: LoaderContext, rawContent: string) {\n const {vars, options} = this;\n const {disableLiquid} = options;\n\n const [frontmatter, content, rawFrontmatter] = safeExtractFrontmatter.call(this, rawContent);\n\n if (!rawFrontmatter) {\n this.api.meta.set({});\n return rawContent;\n }\n\n if (disableLiquid) {\n this.api.meta.set(frontmatter);\n } else {\n this.api.meta.set(liquidJson.call(this, frontmatter, vars));\n }\n\n this.sourcemap.delete(1, rawFrontmatter);\n\n return content;\n}\n", "import type {LoaderContext} from '../loader';\n\nimport {liquidSnippet} from '@diplodoc/liquid';\n\nexport function templateContent(this: LoaderContext, rawContent: string) {\n const {vars, options} = this;\n const {disableLiquid} = options;\n\n if (disableLiquid) {\n return rawContent;\n }\n\n const content = liquidSnippet.call(this, rawContent, vars, this.sourcemap);\n\n return content;\n}\n", "import type {LoaderContext} from '../loader';\n\nexport function resolveComments(this: LoaderContext, content: string) {\n const COMMENTS_CONTENTS = /<!-{2,}[\\s\\S]*?-{2,}>/g;\n const comments = [];\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = COMMENTS_CONTENTS.exec(content))) {\n comments.push([match.index, COMMENTS_CONTENTS.lastIndex] as [number, number]);\n }\n\n this.api.comments.set(comments);\n\n return content;\n}\n", "import type {IncludeInfo} from '../types';\nimport type {LoaderContext} from '../loader';\n\nimport {parseLocalUrl, rebasePath} from '~/core/utils';\n\nimport {filterRanges, findLink} from '../utils';\n\nexport function resolveDependencies(this: LoaderContext, content: string) {\n const includes = [];\n const exclude = [...this.api.comments.get()];\n\n // Include example: {% include [createfolder](create-folder.md) %}\n // Regexp result: [createfolder](create-folder.md)\n const INCLUDE_CONTENTS = /{%\\s*include\\s*.+?%}/g;\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = INCLUDE_CONTENTS.exec(content))) {\n // Ugly workaround for include examples\n // TODO: rewrite all inspect code on markdown-it parsing with minimal set of plugins\n if (content[match.index - 1] === '`') {\n continue;\n }\n\n const link = findLink(match[0]) as string;\n // TODO: warn about non local urls\n const include = parseLocalUrl<IncludeInfo>(link);\n\n if (include) {\n include.path = rebasePath(this.path, include.path as RelativePath);\n include.link = link;\n include.match = content.slice(match.index, INCLUDE_CONTENTS.lastIndex);\n include.location = [match.index, INCLUDE_CONTENTS.lastIndex];\n\n includes.push(include);\n }\n }\n\n this.api.deps.set(filterRanges(exclude, includes));\n\n return content;\n}\n", "import type {AssetInfo, Location} from './types';\nimport type {ImageOptions} from '@diplodoc/transform/lib/typings';\nimport type {ConstructorBlock, PageContent} from '@diplodoc/page-constructor-extension';\n\nimport {load as yamlLoad} from 'js-yaml';\n\nimport {MEDIA_FORMATS, parseLocalUrl, walkLinks} from '~/core/utils';\n\ntype AssetModifier = '!' | '@' | '';\n\nconst modifiers = {'!': 'image', '@': 'video', '': 'link'} as const;\n\nexport function findLink(content: string): string | undefined {\n const rx = /]\\(\\s*/g;\n const match = rx.exec(content);\n if (!match) {\n return undefined;\n }\n\n const link = parseLinkDestination(content, rx.lastIndex);\n\n if (link === null || link.match(/[${}]/)) {\n return undefined;\n }\n\n rx.lastIndex += link.length + 1;\n\n return link;\n}\n\nexport function extractImages(block: ConstructorBlock | string): string[] {\n const images: string[] = [];\n\n if (!block) {\n return images;\n }\n\n if (typeof block === 'string') {\n const trimmedBlock = block.trim();\n\n if (MEDIA_FORMATS.test(trimmedBlock) && trimmedBlock.split(/\\s+/).length === 1) {\n images.push(trimmedBlock);\n }\n\n return images;\n }\n\n walkLinks(block, (value) => {\n if (MEDIA_FORMATS.test(value) && value.split(/\\s+/).length === 1) {\n images.push(value);\n }\n });\n\n return images;\n}\n\nexport function parsePcBlocks(blocks: ConstructorBlock[] = [], images: string[] = []): string[] {\n for (const block of blocks) {\n images.push(...extractImages(block));\n }\n\n return images;\n}\n\nexport function getPcIconTitle(iconPath: string): string {\n const file = iconPath.split('/').pop() || iconPath;\n\n return file.replace(/\\.[^.]+$/, '');\n}\n\nexport function findPcImages(content: string): AssetInfo[] {\n const pcImages: AssetInfo[] = [];\n const openRegex = /^([ \\t]*):::\\s*page-constructor[ \\t]*\\r?\\n?/gm;\n\n let match: RegExpExecArray | null;\n\n while ((match = openRegex.exec(content))) {\n const indent = match[1] || '';\n const startIdx = openRegex.lastIndex;\n const closeRegex = new RegExp(`^${indent}:::[ \\\\t]*$`, 'mg');\n\n closeRegex.lastIndex = startIdx;\n\n const closeMatch = closeRegex.exec(content);\n\n if (!closeMatch) {\n continue;\n }\n\n const rawBlock = content.slice(startIdx, closeMatch.index);\n let data: PageContent;\n\n try {\n data = yamlLoad(rawBlock) as PageContent;\n } catch {\n continue;\n }\n\n const images = parsePcBlocks(data?.blocks as ConstructorBlock[], []);\n\n for (const img of images) {\n const parsed = parseLocalUrl(img);\n\n if (!parsed) {\n continue;\n }\n\n pcImages.push({\n ...parsed,\n type: 'image',\n subtype: 'image',\n title: getPcIconTitle(img),\n autotitle: false,\n hash: null,\n search: null,\n location: [match.index, closeRegex.lastIndex],\n // no inline svg inside page-constructor because we hasn't a location for asset\n options: {width: undefined, height: undefined, inline: false},\n });\n }\n\n openRegex.lastIndex = closeRegex.lastIndex;\n }\n\n return pcImages;\n}\n\nexport function findLinksInfo(content: string): AssetInfo[] {\n const links = find(/]\\(\\s*/g, content, (match, rx) => {\n const link = parseLinkDestination(content, rx.lastIndex);\n const title = parseLinkTitle(content, rx.lastIndex - match[0].length);\n const options = parseLinkOptions(content, rx.lastIndex + (link?.length || 0) + 1);\n\n // TODO: add more precise filter for unix compatible paths\n if (link === null || title === null || link.match(/[${}]/)) {\n return undefined;\n }\n\n const parsed = parseLocalUrl(link);\n if (!parsed) {\n return undefined;\n }\n\n const modifier = content[\n rx.lastIndex - match[0].length - title.length - 2\n ] as AssetModifier;\n const type = modifiers[modifier] || 'link';\n\n rx.lastIndex += link.length + 1;\n\n return {\n ...parsed,\n type,\n subtype: type === 'image' ? 'image' : null,\n title,\n autotitle: type === 'link' && (!title || title === '{#T}'),\n options,\n };\n });\n\n const referenceLinks = find(/]\\[\\s*/g, content, (match, rx) => {\n let link = parseLinkDestination(content, rx.lastIndex, ['[', ']']);\n let title = parseLinkTitle(content, rx.lastIndex - match[0].length);\n const options = parseLinkOptions(content, rx.lastIndex + (link?.length || 0) + 1);\n\n // TODO: add more precise filter for unix compatible paths\n if ((link === null && title === null) || link?.match(/[${}]/)) {\n return undefined;\n }\n title = title || '';\n link = link || title;\n\n const parsed = parseLocalUrl(link);\n if (!parsed) {\n return undefined;\n }\n\n const modifier = content[\n rx.lastIndex - match[0].length - title.length - 2\n ] as AssetModifier;\n const type = modifiers[modifier] || 'link';\n\n rx.lastIndex += (content[rx.lastIndex] === ']' ? 0 : link.length) + 1;\n\n return {\n ...parsed,\n type,\n subtype: 'reference',\n code: link,\n title,\n autotitle: type === 'link' && (!title || title === '{#T}'),\n options,\n };\n });\n\n return [...links, ...referenceLinks];\n}\n\nexport function findDefs(content: string): AssetInfo[] {\n return find(/^\\s*\\[(.*?)]:\\s*([^\\s]+)/gm, content, (match) => {\n const parsed = parseLocalUrl(match[2]);\n if (!parsed) {\n return undefined;\n }\n\n return {\n ...parsed,\n type: 'def',\n code: match[1] || undefined,\n title: '',\n autotitle: true,\n };\n });\n}\n\nfunction find(\n matcher: RegExp,\n content: string,\n map: (match: RegExpMatchArray, rx: RegExp) => Omit<AssetInfo, 'location'> | void,\n): AssetInfo[] {\n const links: AssetInfo[] = [];\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = matcher.exec(content))) {\n const result = map(match, matcher);\n if (!result) {\n continue;\n }\n\n if (result) {\n links.push({\n ...result,\n location: [match.index, matcher.lastIndex],\n });\n }\n }\n\n return links;\n}\n\nfunction parseLinkDestination(str: string, start: number, symbols = ['(', ')']) {\n const max = str.length;\n const [symbolStart, symbolEnd] = symbols.map((symbol) => symbol.charCodeAt(0));\n\n let code,\n level = 0,\n pos = start;\n\n if (str.charCodeAt(pos) === 0x3c /* < */) {\n return parseSimpleLink(str, start + 1);\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) {\n break;\n }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7f) {\n break;\n }\n\n if (code === 0x5c /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) {\n break;\n }\n pos += 2;\n continue;\n }\n\n if (code === symbolStart /* ( or [ */) {\n level++;\n if (level > 32) {\n return null;\n }\n }\n\n if (code === symbolEnd /* ) or ] */) {\n if (level === 0) {\n break;\n }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) {\n return null;\n }\n if (level !== 0) {\n return null;\n }\n\n return str.slice(start, pos);\n}\n\nfunction parseLinkTitle(str: string, start: number) {\n let code,\n prev,\n level = 0,\n pos = start;\n\n while (pos >= 0) {\n code = str.charCodeAt(pos);\n prev = str.charCodeAt(pos - 1);\n\n // ascii control characters\n if (code < 0x20 || code === 0x7f) {\n break;\n }\n\n if (prev === 0x5c /* \\ */) {\n pos -= 2;\n continue;\n }\n\n if (code === 93 /* ] */) {\n level++;\n if (level > 32) {\n return null;\n }\n }\n\n if (code === 91 /* [ */) {\n if (level === 1) {\n break;\n }\n level--;\n }\n\n pos--;\n }\n\n return str.slice(pos + 1, start);\n}\n\nfunction parseLinkOptions(str: string, start: number): ImageOptions {\n const max = str.length;\n const options: ImageOptions = {\n width: undefined,\n height: undefined,\n inline: undefined,\n };\n let code,\n level = 0,\n pos = start,\n startOption = start;\n\n if (str[pos - 1] !== ')') {\n level--;\n }\n if (str.charCodeAt(pos) !== 0x7b /* { */ && level === 0) {\n return options;\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x29 /* ) */ && level === -1) {\n if (str.charCodeAt(pos + 1) !== 0x7b) {\n return options;\n }\n level++;\n }\n\n if (code === 0x7b /* { */ && level > -1) {\n level++;\n startOption = pos + 1;\n if (level > 32) {\n return options;\n }\n }\n\n if (code === 0x7d /* } */) {\n if (level === 1) {\n level--;\n break;\n }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos || level !== 0) {\n return options;\n }\n\n const attrRegex = /(\\w+)=(?:'([^']*)'|\"([^\"]*)\"|(\\S+))/g;\n const optionsString = str.slice(startOption, pos);\n let match;\n\n while ((match = attrRegex.exec(optionsString)) !== null) {\n const key = match[1] as keyof ImageOptions;\n const value = match[2] || match[3] || match[4];\n\n if (key === 'inline') {\n options[key] = value === 'true';\n } else {\n options[key] = value;\n }\n }\n\n return options;\n}\n\nfunction parseSimpleLink(str: string, start: number) {\n const max = str.length;\n\n let code,\n pos = start;\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0a /* \\n */) {\n return null;\n }\n if (code === 0x3c /* < */) {\n return null;\n }\n if (code === 0x3e /* > */) {\n return str.slice(start, pos);\n }\n if (code === 0x5c /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return null;\n}\n\nexport function filterRanges<T extends {location: Location}>(\n excludes: Location[],\n infos: T[],\n): T[] {\n const contains = (exclude: Location, point: Location) => {\n return (\n (exclude[1] >= point[0] && exclude[1] <= point[1]) ||\n (exclude[0] >= point[0] && exclude[0] < point[1]) ||\n (exclude[0] < point[0] && exclude[1] >= point[1])\n );\n };\n\n return infos.filter((item) => {\n return !excludes.some((exclude) => contains(exclude, item.location));\n });\n}\n\nexport function parseHeading(content: string) {\n const anchors = [];\n const commonHeading = content.match(/^#+/);\n const alternateHeading = content[content.length - 1];\n const alternaleLevels = ['-', '='];\n const level = commonHeading\n ? commonHeading[0].length\n : alternaleLevels.indexOf(alternateHeading) + 1;\n\n if (commonHeading) {\n content = content.replace(/^#+\\s*/, '');\n } else {\n content = content.replace(/\\n[-=]+$/, '');\n }\n\n const ANCHOR = /[^[]{(#[^}]+)}/g;\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = ANCHOR.exec(content))) {\n anchors.push(match[1]);\n content = content.replace(match[0], '');\n ANCHOR.lastIndex -= match[0].length;\n }\n\n const title = content.trim();\n\n return {anchors, title, level};\n}\n", "import type {LoaderContext} from '../loader';\nimport type {AssetInfo} from '../types';\n\nimport {rebasePath} from '~/core/utils';\n\nimport {filterRanges, findDefs, findLinksInfo, findPcImages} from '../utils';\n\nexport function resolveAssets(this: LoaderContext, content: string) {\n const assets: AssetInfo[] = [];\n\n const exclude = [\n ...this.api.deps.get().map(({location}) => location),\n ...this.api.comments.get(),\n ...this.api.blockCodes.get(),\n ];\n\n const defs = filterRanges(exclude, findDefs(content));\n const links = filterRanges(exclude, findLinksInfo(content));\n const pcImages = filterRanges(exclude, findPcImages(content));\n\n for (const info of [...defs, ...links, ...pcImages]) {\n try {\n if (info.path !== null && !info.path?.startsWith('*') && !info.path?.includes('%')) {\n info.path = rebasePath(this.path, decodeURIComponent(info.path) as RelativePath);\n }\n\n assets.push(info);\n } catch (error) {\n this.logger.error(`Error processing asset from ${this.path} to ${info.path}: ${error}`);\n }\n }\n\n this.api.assets.set([...assets]);\n\n return content;\n}\n", "import type {Location} from '../types';\nimport type {LoaderContext} from '../loader';\n\nimport {filterRanges} from '../utils';\n\nexport function resolveHeadings(this: LoaderContext, content: string) {\n const headings = [];\n const exclude = [...this.api.comments.get()];\n\n const heading = /(?<=^|\\n)([#=-])/g;\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = heading.exec(content))) {\n const [result, location] =\n match[1] === '#'\n ? findCommonHeading(match.index, content)\n : findAlternateHeading(match.index, content);\n\n if (result) {\n headings.push({content: result, location});\n heading.lastIndex = location[1];\n }\n }\n\n this.api.headings.set(filterRanges(exclude, headings));\n\n return content;\n}\n\nconst SPACE = /[ \\t]/;\n\nfunction findCommonHeading(start: number, content: string): [string, Location] | never[] {\n let title = '';\n\n let index = start;\n while (index < content.length) {\n if (index - start > 6) {\n return [];\n }\n\n if (content[index] === '#') {\n index++;\n } else if (content[index].match(SPACE)) {\n break;\n } else {\n return [];\n }\n }\n\n while (index < content.length) {\n if (content[index + 1] && content[index] !== '\\n') {\n title += content[index];\n index++;\n } else if (title.trim()) {\n return [content.slice(start, index), [start, index]];\n } else {\n return [];\n }\n }\n\n return [];\n}\n\nfunction findAlternateHeading(start: number, content: string): [string, Location] | never[] {\n const delim = content[start];\n const newline = [];\n\n let title = '';\n\n let end = start;\n while (end < content.length) {\n if (content[end] === delim) {\n end++;\n } else if (content[end] === '\\n' || !content[end + 1]) {\n break;\n } else {\n return [];\n }\n }\n\n let index = start - 1;\n while (index >= 0) {\n const isContentStart = !index;\n const isTitleStart = newline.length === 2 && !content.slice(...newline).trim();\n\n if (newline.length && !isTitleStart) {\n newline.length = 1;\n }\n\n if (!isTitleStart) {\n title = content[index] + title;\n }\n\n if (isContentStart || isTitleStart) {\n const clean = title.trimStart();\n if (clean) {\n return [content.slice(start - clean.length, end), [start - clean.length, end]];\n } else {\n return [];\n }\n }\n\n if (content[index] === '\\n') {\n newline.unshift(index);\n }\n\n index--;\n }\n\n return [];\n}\n", "import type {LoaderContext} from '../loader';\n\nexport function resolveNoTranslate(this: LoaderContext, content: string) {\n if (this.mode === 'translate') {\n return content;\n }\n\n content = resolveContainerDirectives(content);\n\n content = resolveLeafBlockDirectives(content);\n\n content = resolveInlineDirectives(content);\n\n return content;\n}\n\nfunction resolveContainerDirectives(content: string): string {\n const lines = content.split('\\n');\n const result = [];\n\n const stack = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.trim().startsWith(':::')) {\n const directiveLine = line.trim();\n\n if (directiveLine === ':::') {\n if (stack.length > 0) {\n const lastDirective = stack.pop();\n\n if (lastDirective === 'no-translate' && stack.length === 0) {\n continue;\n }\n\n result.push(line);\n }\n } else {\n const directiveMatch = directiveLine.match(/^:::\\s*([^\\s]+)/);\n const directiveName = directiveMatch ? directiveMatch[1] : '';\n\n if (directiveName === 'no-translate') {\n stack.push('no-translate');\n continue;\n } else {\n stack.push(directiveName);\n result.push(line);\n }\n }\n } else {\n result.push(line);\n }\n }\n\n return result.join('\\n');\n}\n\nfunction resolveLeafBlockDirectives(content: string): string {\n const blockRegex = /::\\s*no-translate\\s*\\[([\\s\\S]*?)\\]/g;\n\n return content.replace(blockRegex, (_, innerContent) => {\n return innerContent;\n });\n}\n\nfunction resolveInlineDirectives(content: string): string {\n const inlineRegex = /(?<![:]):no-translate\\s*\\[([\\s\\S]*?)\\]/g;\n\n return content.replace(inlineRegex, (_, innerContent) => {\n return innerContent;\n });\n}\n", "import type {LoaderContext} from '../loader';\nimport type Token from 'markdown-it/lib/token';\n\nimport MarkdownIt from 'markdown-it';\n// @ts-ignore\n// import meta from 'markdown-it-meta';\n// @ts-ignore\n// import sup from 'markdown-it-sup';\n// @ts-ignore\nimport deflist from 'markdown-it-deflist';\n// import cut from '@diplodoc/transform/lib/plugins/cut';\n// import checkbox from '@diplodoc/transform/lib/plugins/checkbox';\n// import monospace from '@diplodoc/transform/lib/plugins/monospace';\nimport imsize from '@diplodoc/transform/lib/plugins/imsize';\n// import file from '@diplodoc/transform/lib/plugins/file';\n// import video from '@diplodoc/transform/lib/plugins/video';\nimport yfmTable from '@diplodoc/transform/lib/plugins/table';\n\nfunction computeLineStarts(lines: string[]): number[] {\n const lineStarts: number[] = [0];\n for (let i = 1; i < lines.length; i++) {\n // const lineEndingLength = lines[i - 1].endsWith('\\r') ? 2 : 1;\n lineStarts[i] = lineStarts[i - 1] + lines[i - 1].length + 1;\n }\n return lineStarts;\n}\n\nconst lineToCharPosition = (line: number, lineStarts: number[], content: string): number =>\n line >= lineStarts.length ? content.length : lineStarts[line];\n\nfunction calculateAdjustedEnd(\n endLine: number,\n lineStarts: number[],\n lines: string[],\n content: string,\n): number {\n let end = content.length;\n if (endLine <= lineStarts.length) {\n end = endLine === 0 ? 0 : lineStarts[endLine - 1] + lines[endLine - 1].length;\n }\n return endLine <= lines.length && endLine > 0 ? end + 1 : end;\n}\n\n// Process block code tokens (fence and code_block)\nfunction processBlockCode(\n token: Token,\n lineStarts: number[],\n lines: string[],\n content: string,\n codes: Array<[number, number]>,\n) {\n if (!token.map || token.map.length !== 2) {\n return;\n }\n\n const [startLine, endLine] = token.map;\n\n const start = lineToCharPosition(startLine, lineStarts, content);\n\n let adjustedEnd: number;\n if (token.type === 'fence' && endLine <= lines.length) {\n const endLineContent = lines[endLine - 1] || '';\n const fenceEndIndex = endLineContent.indexOf(token.markup);\n if (fenceEndIndex > -1) {\n const lineStart = lineStarts[endLine - 1] || 0;\n const fenceEndPos = lineStart + fenceEndIndex + token.markup.length;\n adjustedEnd = fenceEndPos;\n } else {\n adjustedEnd = calculateAdjustedEnd(endLine, lineStarts, lines, content);\n }\n } else {\n adjustedEnd = calculateAdjustedEnd(endLine, lineStarts, lines, content);\n }\n\n codes.push([start, adjustedEnd]);\n}\n\n// Check specific attribute in image part\nfunction checkAttribute(\n imagePart: string,\n matchStart: number,\n codeText: string | null,\n start: number | undefined,\n end: number | undefined,\n regex: RegExp,\n getAttrStart: (matchStart: number, imagePart: string) => number,\n): boolean {\n const match = imagePart.match(regex);\n if (match) {\n if (codeText !== null) {\n // Check if code text is in attributes\n if (match[1].includes(codeText)) {\n return true;\n }\n } else if (start !== undefined && end !== undefined) {\n // Check if code range falls within attributes\n const attrStart = getAttrStart(matchStart, imagePart);\n const attrEnd = attrStart + match[0].length;\n if (start >= attrStart && end <= attrEnd) {\n return true;\n }\n }\n }\n return false;\n}\n\n// Check attributes in image part\nfunction checkImageAttributes(\n imagePart: string,\n matchStart: number,\n codeText: string | null,\n start?: number,\n end?: number,\n): {braceMatch: boolean; quoteMatch: boolean} {\n // Check attributes in curly braces {...}\n const braceMatch = checkAttribute(\n imagePart,\n matchStart,\n codeText,\n start,\n end,\n /\\s*{([^}]*)}/,\n (matchStart, imagePart) => matchStart + imagePart.indexOf('{'),\n );\n\n // Check title attribute in quotes \"...\"\n const quoteMatch = checkAttribute(\n imagePart,\n matchStart,\n codeText,\n start,\n end,\n /\\s*\"([^\"]*)\"/,\n (matchStart, imagePart) => matchStart + imagePart.indexOf('\"'),\n );\n\n return {braceMatch, quoteMatch};\n}\n\n// Add code to array and update position\nfunction addCodeAndUpdatePosition(\n startIndex: number,\n endIndex: number,\n content: string,\n codes: Array<[number, number]>,\n parentStartPos: number,\n): number {\n // Check if this code is inside image attributes\n const insideAttrs = isInsideImageAttributes(content, startIndex, endIndex);\n if (!insideAttrs) {\n codes.push([startIndex, endIndex]);\n }\n\n // Update parentStartPos to avoid finding the same match again\n return insideAttrs ? parentStartPos : Math.max(parentStartPos, endIndex);\n}\n\n// Process inline code tokens\nfunction processInlineCode(\n token: Token,\n content: string,\n parentStartPos: number,\n codes: Array<[number, number]>,\n lineStarts: number[],\n lines: string[],\n): number {\n if (!token.markup || !token.content) {\n return parentStartPos;\n }\n\n // Use token's position information if available\n if (token.map && token.map.length === 2) {\n const [startLine, _endLine] = token.map;\n const start = lineToCharPosition(startLine, lineStarts, content);\n\n // Find the exact position of the inline code within the line\n const lineContent = lines[startLine] || '';\n const searchPattern = token.markup + token.content + token.markup;\n const patternIndex = lineContent.indexOf(searchPattern);\n\n if (patternIndex !== -1) {\n const startIndex = start + patternIndex;\n const endIndex = startIndex + searchPattern.length;\n\n return addCodeAndUpdatePosition(startIndex, endIndex, content, codes, parentStartPos);\n }\n } else {\n const searchPattern = token.markup + token.content + token.markup;\n const startIndex = content.indexOf(searchPattern, parentStartPos);\n\n if (startIndex !== -1) {\n const endIndex = startIndex + searchPattern.length;\n\n return addCodeAndUpdatePosition(startIndex, endIndex, content, codes, parentStartPos);\n }\n }\n\n return parentStartPos;\n}\n\n// Function to check if code is inside image attributes\nfunction isInsideImageAttributes(content: string, start: number, end: number): boolean {\n // Regular expression to find images with attributes\n // Looking for pattern ![...](...) with optional \"title\" and/or {...} attributes\n // Considering multiline images with 's' flag (dotAll)\n const imageRegex = /!\\[[^\\]]*\\]\\([^)]*\\)(?:\\s*\"[^\"]*\")?(?:\\s*{[^}]*})?/gs;\n\n // First check if code is inside attributes of a specific image\n let match;\n while ((match = imageRegex.exec(content)) !== null) {\n // Start and end of the entire match\n const matchStart = match.index;\n const matchEnd = match.index + match[0].length;\n\n // Check if code range falls within this match\n if (start >= matchStart && end <= matchEnd) {\n // Now check if code is in attributes\n const imagePart = match[0];\n const {braceMatch, quoteMatch} = checkImageAttributes(\n imagePart,\n matchStart,\n null,\n start,\n end,\n );\n if (braceMatch || quoteMatch) {\n return true;\n }\n }\n }\n\n // Additional check: if code is in attributes of any image in the document,\n // then it should not be marked as code block\n const codeContent = content.substring(start, end);\n const codeText = codeContent.replace(/`/g, ''); // Remove backticks\n\n // Find all images in the document\n const allImagesRegex = /!\\[[^\\]]*\\]\\([^)]*\\)(?:\\s*\"[^\"]*\")?(?:\\s*{[^}]*})?/gs;\n let imageMatch;\n while ((imageMatch = allImagesRegex.exec(content)) !== null) {\n // Check if code is in image attributes\n const imagePart = imageMatch[0];\n const {braceMatch, quoteMatch} = checkImageAttributes(\n imagePart,\n imageMatch.index,\n codeText,\n );\n if (braceMatch || quoteMatch) {\n return true;\n }\n }\n\n // Additional check for YFM tables: if code is in one table cell,\n // and image in another cell of the same row, then code should not be marked as code block\n // Check if code is in YFM table context\n const lines = content.split('\\n');\n let lineIndex = 0;\n let charCount = 0;\n\n // Find the line where the code is located\n for (let i = 0; i < lines.length; i++) {\n if (charCount <= start && start < charCount + lines[i].length + 1) {\n lineIndex = i;\n break;\n }\n charCount += lines[i].length + 1;\n }\n\n // Check if line is in YFM table context\n if (lineIndex > 0 && lineIndex < lines.length - 1) {\n const prevLine = lines[lineIndex - 1];\n const currentLine = lines[lineIndex];\n const nextLine = lines[lineIndex + 1];\n\n // Check if previous line is table start\n if (prevLine.trim().startsWith('#|')) {\n // Check if next line is table end\n if (nextLine.trim().startsWith('|#')) {\n // Check if current line contains image\n if (currentLine.includes('![') && currentLine.includes('](')) {\n // In YFM table, if code is in one cell and image in another,\n // then code should not be marked as code block\n // We need to check if code is in the same line as image\n return true;\n }\n }\n }\n }\n\n return false;\n}\n\n// Process inline tokens that may contain inline code\nfunction processInlineToken(\n token: Token,\n lineStarts: number[],\n content: string,\n parentStartPos: number,\n): number {\n if (!token.children || token.children.length === 0) {\n return parentStartPos;\n }\n\n let inlineStartPos = parentStartPos;\n if (token.map && token.map.length === 2) {\n const [startLine] = token.map;\n inlineStartPos = lineToCharPosition(startLine, lineStarts, content);\n }\n\n return inlineStartPos;\n}\n\nexport function resolveBlockCodes(this: LoaderContext, content: string) {\n const md = new MarkdownIt({html: true});\n const diplodocOptions = {\n notesAutotitle: false,\n path: '',\n };\n\n // md.disable('text_join');\n // md.disable('entity');\n\n // md.use(meta, diplodocOptions);\n // md.use(cut, diplodocOptions);\n // md.use(sup, diplodocOptions);\n md.use(deflist, diplodocOptions);\n // md.use(checkbox, diplodocOptions);\n // md.use(monospace, diplodocOptions);\n md.use(imsize, diplodocOptions);\n // md.use(file, diplodocOptions);\n // md.use(video, diplodocOptions);\n md.use(yfmTable, diplodocOptions);\n\n const tokens = md.parse(content, {});\n\n const codes: Array<[number, number]> = [];\n\n const lines = content.split('\\n');\n const lineStarts = computeLineStarts(lines);\n\n function extractCodeBlocks(\n tokens: Token[],\n parentStartPos = 0,\n parentType: string | null = null,\n ) {\n for (const token of tokens) {\n let currentParentStartPos = parentStartPos;\n\n if (token.type === 'fence' || token.type === 'code_block') {\n processBlockCode(token, lineStarts, lines, content, codes);\n } else if (token.type === 'inline') {\n currentParentStartPos = processInlineToken(\n token,\n lineStarts,\n content,\n parentStartPos,\n );\n\n if (token.children && token.children.length > 0) {\n extractCodeBlocks(token.children, currentParentStartPos, token.type);\n }\n\n continue;\n } else if (token.type === 'code_inline') {\n // Skip code_inline tokens that are children of image tokens\n if (parentType !== 'image') {\n currentParentStartPos = processInlineCode(\n token,\n content,\n parentStartPos,\n codes,\n lineStarts,\n lines,\n );\n }\n }\n\n if (token.children && token.children.length > 0 && token.type !== 'inline') {\n extractCodeBlocks(token.children, currentParentStartPos, token.type);\n }\n }\n }\n\n extractCodeBlocks(tokens);\n\n this.api.blockCodes.set(codes);\n\n return content;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_liquid", "import_utils", "import_utils", "import_liquid", "import_utils", "import_utils", "yamlLoad", "import_utils", "matchStart", "imagePart", "MarkdownIt", "deflist", "imsize", "yfmTable", "tokens", "headings", "path"]
7
7
  }
@@ -514,7 +514,7 @@ function resolveAssets(content) {
514
514
  const pcImages = filterRanges(exclude, findPcImages(content));
515
515
  for (const info of [...defs, ...links, ...pcImages]) {
516
516
  try {
517
- if (info.path !== null) {
517
+ if (info.path !== null && !info.path?.startsWith("*") && !info.path?.includes("%")) {
518
518
  info.path = rebasePath2(this.path, decodeURIComponent(info.path));
519
519
  }
520
520
  assets.push(info);
@@ -669,6 +669,7 @@ function resolveInlineDirectives(content) {
669
669
  // src/core/markdown/loader/resolve-code.ts
670
670
  import MarkdownIt from "markdown-it";
671
671
  import deflist from "markdown-it-deflist";
672
+ import imsize from "@diplodoc/transform/lib/plugins/imsize";
672
673
  import yfmTable from "@diplodoc/transform/lib/plugins/table";
673
674
  function computeLineStarts(lines) {
674
675
  const lineStarts = [0];
@@ -854,6 +855,7 @@ function resolveBlockCodes(content) {
854
855
  path: ""
855
856
  };
856
857
  md.use(deflist, diplodocOptions);
858
+ md.use(imsize, diplodocOptions);
857
859
  md.use(yfmTable, diplodocOptions);
858
860
  const tokens = md.parse(content, {});
859
861
  const codes = [];
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/core/markdown/hooks.ts", "../../src/core/markdown/MarkdownService.ts", "../../src/core/markdown/loader.ts", "../../src/core/markdown/loader/mangle-frontmatter.ts", "../../src/core/markdown/loader/template-content.ts", "../../src/core/markdown/loader/resolve-comments.ts", "../../src/core/markdown/loader/resolve-deps.ts", "../../src/core/markdown/utils.ts", "../../src/core/markdown/loader/resolve-assets.ts", "../../src/core/markdown/loader/resolve-headings.ts", "../../src/core/markdown/loader/resolve-no-translate.ts", "../../src/core/markdown/loader/resolve-code.ts"],
4
- "sourcesContent": ["import type {VFile} from '~/core/utils';\nimport type {Collect, Plugin} from './types';\nimport type {Meta} from '~/core/meta';\n\nimport {AsyncSeriesHook, AsyncSeriesWaterfallHook} from 'tapable';\n\nimport {generateHooksAccess} from '~/core/utils';\n\nexport function hooks(name: string) {\n return {\n Collects: new AsyncSeriesWaterfallHook<[Collect[]]>(['collects'], `${name}.Collects`),\n Plugins: new AsyncSeriesWaterfallHook<[Plugin[]]>(['plugins'], `${name}.Plugins`),\n Loaded: new AsyncSeriesHook<[string, DeepFrozen<Meta>, NormalizedPath]>(\n ['markdown', 'meta', 'path'],\n `${name}.Loaded`,\n ),\n Resolved: new AsyncSeriesHook<[string, NormalizedPath]>(\n ['markdown', 'path'],\n `${name}.Resolved`,\n ),\n Dump: new AsyncSeriesHook<VFile<string>>(['vfile'], `${name}.Dump`),\n };\n}\n\nconst [getHooks, withHooks] = generateHooksAccess('Markdown', hooks);\n\nexport {getHooks, withHooks};\n", "import type {Run as BaseRun} from '~/core/run';\nimport type {VarsService} from '~/core/vars';\nimport type {Meta, MetaService} from '~/core/meta';\nimport type {LoaderContext, TransformMode} from './loader';\nimport type {\n AssetInfo,\n Collect,\n EntryGraph,\n EntryInfo,\n GraphInfo,\n HeadingInfo,\n IncludeInfo,\n Location,\n Plugin,\n} from './types';\n\nimport {dirname, join} from 'node:path';\nimport {SourceMap} from '@diplodoc/liquid';\n\nimport {Buckets, Defer, Graph, VFile, all, bounded, fullPath, normalizePath} from '~/core/utils';\n\nimport {getHooks, withHooks} from './hooks';\nimport {LoaderAPI, loader} from './loader';\nimport {parseHeading} from './utils';\n\ntype MarkdownServiceConfig = {\n outputFormat: `${TransformMode}`;\n template: {\n enabled: boolean;\n features: {\n substitutions: boolean;\n conditions: boolean;\n };\n scopes: {\n code: boolean;\n };\n };\n};\n\ntype Run = BaseRun<MarkdownServiceConfig> & {\n meta: MetaService;\n vars: VarsService;\n};\n\ntype Options = {\n mode: 'build' | 'translate';\n};\n\nfunction hash(path: NormalizedPath, from?: NormalizedPath) {\n return `${path}${from ? '+' + from : ''}`;\n}\n\nconst byLocation = (a: HeadingInfo, b: HeadingInfo) => a.location[0] - b.location[0];\n\n@withHooks\nexport class MarkdownService {\n readonly name = 'Markdown';\n\n get logger() {\n return this.run.logger;\n }\n\n get plugins() {\n return this._plugins.slice();\n }\n\n get collects() {\n return this._collects.slice();\n }\n\n get config() {\n return this.run.config;\n }\n\n private run: Run;\n\n private _collects: Collect[] = [];\n\n private _plugins: Plugin[] = [];\n\n private pathToMeta = new Buckets<Meta>();\n\n private pathToComments = new Buckets<Location[]>();\n\n private pathToDeps = new Buckets<IncludeInfo[]>();\n\n private pathToAssets = new Buckets<AssetInfo[]>();\n\n private pathToHeadings = new Buckets<HeadingInfo[]>();\n\n private pathToSourcemap = new Buckets<Record<number | string, string>>();\n\n private cache: Hash<Promise<string> | string> = {};\n\n private options;\n\n constructor(run: Run, options: Options = {mode: 'build'}) {\n this.run = run;\n this.options = options;\n }\n\n @bounded async init() {\n this._collects = await getHooks(this).Collects.promise(this._collects);\n this._plugins = await getHooks(this).Plugins.promise(this._plugins);\n }\n\n @bounded async load(path: RelativePath, from?: NormalizedPath) {\n const file = normalizePath(path);\n const key = hash(file, from);\n\n if (key in this.cache) {\n return this.cache[key];\n }\n\n const defer = new Defer();\n\n this.cache[key] = defer.promise;\n\n try {\n const source = normalizePath(join(this.run.input, file)) as AbsolutePath;\n const raw = await this.run.read(source);\n const vars = this.run.vars.for(file, from);\n\n const context = this.loaderContext(file, raw, vars, this.proxy(key));\n const content = await loader.call(context, raw);\n\n // At this point all internal states are fully resolved.\n // So we don't expect Defer here.\n const meta = context.api.meta.get() as Meta;\n\n await getHooks(this).Loaded.promise(raw, meta, file);\n\n this.run.meta.addMetadata(file, vars.__metadata);\n this.run.meta.addSystemVars(file, vars.__system);\n this.run.meta.add(file, meta);\n\n this.cache[key] = content;\n defer.resolve(content);\n\n // TODO: this may trigger uncaught exceptions\n // But if we move this two lines above, then program exits unexpectedly\n await getHooks(this).Resolved.promise(content, file);\n } catch (error) {\n defer.reject(error);\n }\n\n return defer.promise;\n }\n\n @bounded async dump(file: NormalizedPath, markdown?: string) {\n const vfile = new VFile<string, EntryInfo>(file, markdown || (await this.load(file)));\n\n vfile.info = {title: '', headings: []};\n\n await getHooks(this).Dump.promise(vfile);\n\n return vfile;\n }\n\n async meta(path: RelativePath) {\n return this._meta(normalizePath(path));\n }\n\n async deps(path: RelativePath) {\n return this._deps(normalizePath(path));\n }\n\n async graph(path: RelativePath) {\n return this._graph(normalizePath(path));\n }\n\n async relations(path: RelativePath) {\n return this._relations(normalizePath(path));\n }\n\n async assets(path: RelativePath) {\n return this._assets(normalizePath(path));\n }\n\n async headings(path: RelativePath) {\n return this._headings(normalizePath(path));\n }\n\n async titles(path: RelativePath) {\n const file = normalizePath(path);\n\n const titles: Hash<string> = {};\n\n try {\n const headings = await this.headings(file);\n const contents = headings.map(({content}) => content);\n\n for (const content of contents) {\n const {level, title, anchors} = parseHeading(content);\n\n if (level === 1 && !titles['#']) {\n titles['#'] = title;\n }\n\n for (const anchor of anchors) {\n titles[anchor] = title;\n }\n }\n } catch {\n // This is acceptable.\n // If this is a real file and someone depends on his titles,\n // then we throw exception in md plugin.\n }\n\n return titles;\n }\n\n @bounded async inspect(path: RelativePath, raw: string, vars: Hash) {\n const file = normalizePath(path);\n const api = new LoaderAPI();\n const context = this.loaderContext(file, raw, vars, api);\n const content = await loader.call(context, raw);\n\n const deps = api.deps.get();\n const assets = [...api.assets.get()];\n\n return {content, deps, assets};\n }\n\n remap(path: RelativePath, line: number): number {\n const file = normalizePath(path);\n const sourcemap = this.pathToSourcemap.get(file);\n\n if (!sourcemap) {\n return line;\n }\n\n return Number(sourcemap[line]) || line;\n }\n\n release(path: NormalizedPath, from?: NormalizedPath) {\n const key = hash(path, from);\n\n delete this.cache[key];\n this.pathToDeps.delete(key);\n this.pathToMeta.delete(key);\n this.pathToAssets.delete(key);\n this.pathToHeadings.delete(key);\n this.pathToComments.delete(key);\n this.pathToSourcemap.delete(key);\n }\n\n private async _meta(file: NormalizedPath, from?: NormalizedPath) {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n return this.pathToMeta.get(key);\n }\n\n private async _deps(file: NormalizedPath, from?: NormalizedPath): Promise<IncludeInfo[]> {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n const deps = this.pathToDeps.get(key) || [];\n const internals: IncludeInfo[][] = await all(\n (this.pathToDeps.get(key) || []).map(async ({path}) => {\n return this._deps(path, from || file);\n }),\n );\n\n return deps.concat(...internals);\n }\n\n private async _graph(path: NormalizedPath, from?: NormalizedPath): Promise<EntryGraph> {\n const key = hash(path, from);\n\n const content = await this.load(path, from);\n const assets = this.pathToAssets.get(key) || [];\n const deps = await all(\n (this.pathToDeps.get(key) || []).map(async (dep) => {\n return {\n ...dep,\n ...(await this._graph(dep.path, from || path)),\n };\n }),\n );\n\n return {path, content, deps, assets};\n }\n\n private async _relations(\n path: NormalizedPath,\n from?: NormalizedPath,\n ): Promise<Graph<GraphInfo>> {\n const key = hash(path, from);\n const graph = new Graph<GraphInfo>();\n\n graph.addNode(path, {type: 'entry'});\n\n await this.load(path, from);\n await all(\n (this.pathToDeps.get(key) || []).map(async (dep) => {\n graph.consume(await this._relations(dep.path, from || path));\n graph.setNodeData(dep.path, {type: 'source'});\n graph.addDependency(path, dep.path);\n }),\n );\n\n (this.pathToAssets.get(key) || []).map(async (asset) => {\n if (['image', 'video'].includes(asset.type)) {\n graph.addNode(asset.path);\n graph.setNodeData(asset.path, {type: 'resource'});\n graph.addDependency(path, asset.path);\n }\n\n if (['link'].includes(asset.type) && asset.autotitle) {\n graph.addNode(asset.path);\n graph.setNodeData(asset.path, {type: 'source'});\n graph.addDependency(path, asset.path);\n }\n });\n\n const meta = this.run.meta.get(path);\n const resources = ([] as string[]).concat(meta.script || [], meta.style || []);\n for (const resource of resources) {\n const file = normalizePath(join(dirname(path), resource));\n graph.addNode(file);\n graph.setNodeData(file, {type: 'resource'});\n graph.addDependency(path, file);\n }\n\n return graph;\n }\n\n private async _assets(file: NormalizedPath, from?: NormalizedPath) {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n const assets = this.pathToAssets.get(key) || [];\n const internals: AssetInfo[][] = await all(\n (this.pathToDeps.get(key) || []).map(async ({path}) => {\n return this._assets(path, from || file);\n }),\n );\n\n return assets.concat(...internals);\n }\n\n private async _headings(file: NormalizedPath, from?: NormalizedPath) {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n const headings = this.pathToHeadings.get(key) || [];\n const internals: HeadingInfo[][] = await all(\n (this.pathToDeps.get(key) || []).map(async ({path, location}) => {\n const headings = await this._headings(path, from || file);\n return headings.map((heading) => ({...heading, location}));\n }),\n );\n\n return headings.concat(...internals).sort(byLocation);\n }\n\n private proxy(key: string) {\n return {\n deps: this.pathToDeps.bind(key),\n assets: this.pathToAssets.bind(key),\n meta: this.pathToMeta.bind(key),\n comments: this.pathToComments.bind(key),\n headings: this.pathToHeadings.bind(key),\n sourcemap: this.pathToSourcemap.bind(key),\n };\n }\n\n private loaderContext(\n path: NormalizedPath,\n raw: string,\n vars: Hash,\n api?: Partial<LoaderAPI>,\n ): LoaderContext {\n return {\n path,\n vars,\n logger: this.logger,\n readFile: (path: RelativePath) => {\n return this.run.read(join(this.run.input, path));\n },\n emitFile: async (file: NormalizedPath, content: string) => {\n const rootPath = fullPath(file, path);\n await this.run.write(join(this.run.input, rootPath), content, true);\n },\n api: new LoaderAPI(api),\n collects: this.collects,\n sourcemap: new SourceMap(raw),\n settings: {\n substitutions: this.config.template.features.substitutions,\n conditions: this.config.template.features.conditions,\n conditionsInCode: this.config.template.scopes.code,\n keepNotVar: this.config.outputFormat === 'md',\n },\n options: {\n disableLiquid: !this.config.template.enabled,\n },\n mode: this.options.mode,\n };\n }\n}\n", "import type {LiquidContext, SourceMap} from '@diplodoc/liquid';\nimport type {Meta} from '~/core/meta';\nimport type {Logger} from '~/core/logger';\nimport type {Bucket} from '~/core/utils';\nimport type {AssetInfo, Collect, HeadingInfo, IncludeInfo, Location} from './types';\n\nimport {merge} from 'lodash';\n\nimport {bucket} from '~/core/utils';\n\nimport {mangleFrontMatter} from './loader/mangle-frontmatter';\nimport {templateContent} from './loader/template-content';\nimport {resolveComments} from './loader/resolve-comments';\nimport {resolveDependencies} from './loader/resolve-deps';\nimport {resolveAssets} from './loader/resolve-assets';\nimport {resolveHeadings} from './loader/resolve-headings';\nimport {resolveNoTranslate} from './loader/resolve-no-translate';\nimport {resolveBlockCodes} from './loader/resolve-code';\n\nexport enum TransformMode {\n Html = 'html',\n Md = 'md',\n}\n\nexport class LoaderAPI {\n blockCodes: Bucket<Location[]>;\n comments: Bucket<Location[]>;\n deps: Bucket<IncludeInfo[]>;\n assets: Bucket<AssetInfo[]>;\n meta: Bucket<Meta>;\n headings: Bucket<HeadingInfo[]>;\n sourcemap: Bucket<Record<number | string, string>>;\n\n constructor(proxy: Partial<LoaderAPI> = {}) {\n this.blockCodes = proxy.blockCodes || bucket();\n this.deps = proxy.deps || bucket();\n this.assets = proxy.assets || bucket();\n this.meta = proxy.meta || bucket();\n this.comments = proxy.comments || bucket();\n this.headings = proxy.headings || bucket();\n this.sourcemap = proxy.sourcemap || bucket();\n }\n}\n\nexport type LoaderContext = LiquidContext & {\n path: NormalizedPath;\n vars: Hash;\n logger: Logger;\n emitFile(path: NormalizedPath, content: string): Promise<void>;\n readFile(path: NormalizedPath): Promise<string>;\n collects: Collect[];\n api: LoaderAPI;\n sourcemap: SourceMap;\n options: {\n disableLiquid: boolean;\n };\n mode: 'build' | 'translate';\n};\n\nexport async function loader(this: LoaderContext, content: string) {\n content = mangleFrontMatter.call(this, content);\n content = resolveNoTranslate.call(this, content);\n content = templateContent.call(this, content);\n content = await applyCollectPlugins.call(this, content);\n content = resolveBlockCodes.call(this, content);\n content = resolveComments.call(this, content);\n content = resolveDependencies.call(this, content);\n content = resolveAssets.call(this, content);\n content = resolveHeadings.call(this, content);\n\n this.api.sourcemap.set(this.sourcemap.dump());\n\n return content;\n}\n\nasync function applyCollectPlugins(this: LoaderContext, content: string) {\n let meta = {};\n\n for (const collect of this.collects) {\n let result = await collect.call(this, content, {});\n\n if (Array.isArray(result)) {\n meta = merge(meta, result[1] || {});\n result = result[0] as string;\n }\n\n if (result !== undefined) {\n content = result as string;\n }\n }\n\n return content;\n}\n", "import type {LoaderContext} from '../loader';\n\nimport {extractFrontMatter, liquidJson} from '@diplodoc/liquid';\n\nfunction safeExtractFrontmatter(this: LoaderContext, content: string) {\n return extractFrontMatter(content, {json: true});\n}\n\nexport function mangleFrontMatter(this: LoaderContext, rawContent: string) {\n const {vars, options} = this;\n const {disableLiquid} = options;\n\n const [frontmatter, content, rawFrontmatter] = safeExtractFrontmatter.call(this, rawContent);\n\n if (!rawFrontmatter) {\n this.api.meta.set({});\n return rawContent;\n }\n\n if (disableLiquid) {\n this.api.meta.set(frontmatter);\n } else {\n this.api.meta.set(liquidJson.call(this, frontmatter, vars));\n }\n\n this.sourcemap.delete(1, rawFrontmatter);\n\n return content;\n}\n", "import type {LoaderContext} from '../loader';\n\nimport {liquidSnippet} from '@diplodoc/liquid';\n\nexport function templateContent(this: LoaderContext, rawContent: string) {\n const {vars, options} = this;\n const {disableLiquid} = options;\n\n if (disableLiquid) {\n return rawContent;\n }\n\n const content = liquidSnippet.call(this, rawContent, vars, this.sourcemap);\n\n return content;\n}\n", "import type {LoaderContext} from '../loader';\n\nexport function resolveComments(this: LoaderContext, content: string) {\n const COMMENTS_CONTENTS = /<!-{2,}[\\s\\S]*?-{2,}>/g;\n const comments = [];\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = COMMENTS_CONTENTS.exec(content))) {\n comments.push([match.index, COMMENTS_CONTENTS.lastIndex] as [number, number]);\n }\n\n this.api.comments.set(comments);\n\n return content;\n}\n", "import type {IncludeInfo} from '../types';\nimport type {LoaderContext} from '../loader';\n\nimport {parseLocalUrl, rebasePath} from '~/core/utils';\n\nimport {filterRanges, findLink} from '../utils';\n\nexport function resolveDependencies(this: LoaderContext, content: string) {\n const includes = [];\n const exclude = [...this.api.comments.get()];\n\n // Include example: {% include [createfolder](create-folder.md) %}\n // Regexp result: [createfolder](create-folder.md)\n const INCLUDE_CONTENTS = /{%\\s*include\\s*.+?%}/g;\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = INCLUDE_CONTENTS.exec(content))) {\n // Ugly workaround for include examples\n // TODO: rewrite all inspect code on markdown-it parsing with minimal set of plugins\n if (content[match.index - 1] === '`') {\n continue;\n }\n\n const link = findLink(match[0]) as string;\n // TODO: warn about non local urls\n const include = parseLocalUrl<IncludeInfo>(link);\n\n if (include) {\n include.path = rebasePath(this.path, include.path as RelativePath);\n include.link = link;\n include.match = content.slice(match.index, INCLUDE_CONTENTS.lastIndex);\n include.location = [match.index, INCLUDE_CONTENTS.lastIndex];\n\n includes.push(include);\n }\n }\n\n this.api.deps.set(filterRanges(exclude, includes));\n\n return content;\n}\n", "import type {AssetInfo, Location} from './types';\nimport type {ImageOptions} from '@diplodoc/transform/lib/typings';\nimport type {ConstructorBlock, PageContent} from '@diplodoc/page-constructor-extension';\n\nimport {load as yamlLoad} from 'js-yaml';\n\nimport {MEDIA_FORMATS, parseLocalUrl, walkLinks} from '~/core/utils';\n\ntype AssetModifier = '!' | '@' | '';\n\nconst modifiers = {'!': 'image', '@': 'video', '': 'link'} as const;\n\nexport function findLink(content: string): string | undefined {\n const rx = /]\\(\\s*/g;\n const match = rx.exec(content);\n if (!match) {\n return undefined;\n }\n\n const link = parseLinkDestination(content, rx.lastIndex);\n\n if (link === null || link.match(/[${}]/)) {\n return undefined;\n }\n\n rx.lastIndex += link.length + 1;\n\n return link;\n}\n\nexport function extractImages(block: ConstructorBlock | string): string[] {\n const images: string[] = [];\n\n if (!block) {\n return images;\n }\n\n if (typeof block === 'string') {\n const trimmedBlock = block.trim();\n\n if (MEDIA_FORMATS.test(trimmedBlock) && trimmedBlock.split(/\\s+/).length === 1) {\n images.push(trimmedBlock);\n }\n\n return images;\n }\n\n walkLinks(block, (value) => {\n if (MEDIA_FORMATS.test(value) && value.split(/\\s+/).length === 1) {\n images.push(value);\n }\n });\n\n return images;\n}\n\nexport function parsePcBlocks(blocks: ConstructorBlock[] = [], images: string[] = []): string[] {\n for (const block of blocks) {\n images.push(...extractImages(block));\n }\n\n return images;\n}\n\nexport function getPcIconTitle(iconPath: string): string {\n const file = iconPath.split('/').pop() || iconPath;\n\n return file.replace(/\\.[^.]+$/, '');\n}\n\nexport function findPcImages(content: string): AssetInfo[] {\n const pcImages: AssetInfo[] = [];\n const openRegex = /^([ \\t]*):::\\s*page-constructor[ \\t]*\\r?\\n?/gm;\n\n let match: RegExpExecArray | null;\n\n while ((match = openRegex.exec(content))) {\n const indent = match[1] || '';\n const startIdx = openRegex.lastIndex;\n const closeRegex = new RegExp(`^${indent}:::[ \\\\t]*$`, 'mg');\n\n closeRegex.lastIndex = startIdx;\n\n const closeMatch = closeRegex.exec(content);\n\n if (!closeMatch) {\n continue;\n }\n\n const rawBlock = content.slice(startIdx, closeMatch.index);\n let data: PageContent;\n\n try {\n data = yamlLoad(rawBlock) as PageContent;\n } catch {\n continue;\n }\n\n const images = parsePcBlocks(data?.blocks as ConstructorBlock[], []);\n\n for (const img of images) {\n const parsed = parseLocalUrl(img);\n\n if (!parsed) {\n continue;\n }\n\n pcImages.push({\n ...parsed,\n type: 'image',\n subtype: 'image',\n title: getPcIconTitle(img),\n autotitle: false,\n hash: null,\n search: null,\n location: [match.index, closeRegex.lastIndex],\n // no inline svg inside page-constructor because we hasn't a location for asset\n options: {width: undefined, height: undefined, inline: false},\n });\n }\n\n openRegex.lastIndex = closeRegex.lastIndex;\n }\n\n return pcImages;\n}\n\nexport function findLinksInfo(content: string): AssetInfo[] {\n const links = find(/]\\(\\s*/g, content, (match, rx) => {\n const link = parseLinkDestination(content, rx.lastIndex);\n const title = parseLinkTitle(content, rx.lastIndex - match[0].length);\n const options = parseLinkOptions(content, rx.lastIndex + (link?.length || 0) + 1);\n\n // TODO: add more precise filter for unix compatible paths\n if (link === null || title === null || link.match(/[${}]/)) {\n return undefined;\n }\n\n const parsed = parseLocalUrl(link);\n if (!parsed) {\n return undefined;\n }\n\n const modifier = content[\n rx.lastIndex - match[0].length - title.length - 2\n ] as AssetModifier;\n const type = modifiers[modifier] || 'link';\n\n rx.lastIndex += link.length + 1;\n\n return {\n ...parsed,\n type,\n subtype: type === 'image' ? 'image' : null,\n title,\n autotitle: type === 'link' && (!title || title === '{#T}'),\n options,\n };\n });\n\n const referenceLinks = find(/]\\[\\s*/g, content, (match, rx) => {\n let link = parseLinkDestination(content, rx.lastIndex, ['[', ']']);\n let title = parseLinkTitle(content, rx.lastIndex - match[0].length);\n const options = parseLinkOptions(content, rx.lastIndex + (link?.length || 0) + 1);\n\n // TODO: add more precise filter for unix compatible paths\n if ((link === null && title === null) || link?.match(/[${}]/)) {\n return undefined;\n }\n title = title || '';\n link = link || title;\n\n const parsed = parseLocalUrl(link);\n if (!parsed) {\n return undefined;\n }\n\n const modifier = content[\n rx.lastIndex - match[0].length - title.length - 2\n ] as AssetModifier;\n const type = modifiers[modifier] || 'link';\n\n rx.lastIndex += (content[rx.lastIndex] === ']' ? 0 : link.length) + 1;\n\n return {\n ...parsed,\n type,\n subtype: 'reference',\n code: link,\n title,\n autotitle: type === 'link' && (!title || title === '{#T}'),\n options,\n };\n });\n\n return [...links, ...referenceLinks];\n}\n\nexport function findDefs(content: string): AssetInfo[] {\n return find(/^\\s*\\[(.*?)]:\\s*([^\\s]+)/gm, content, (match) => {\n const parsed = parseLocalUrl(match[2]);\n if (!parsed) {\n return undefined;\n }\n\n return {\n ...parsed,\n type: 'def',\n code: match[1] || undefined,\n title: '',\n autotitle: true,\n };\n });\n}\n\nfunction find(\n matcher: RegExp,\n content: string,\n map: (match: RegExpMatchArray, rx: RegExp) => Omit<AssetInfo, 'location'> | void,\n): AssetInfo[] {\n const links: AssetInfo[] = [];\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = matcher.exec(content))) {\n const result = map(match, matcher);\n if (!result) {\n continue;\n }\n\n if (result) {\n links.push({\n ...result,\n location: [match.index, matcher.lastIndex],\n });\n }\n }\n\n return links;\n}\n\nfunction parseLinkDestination(str: string, start: number, symbols = ['(', ')']) {\n const max = str.length;\n const [symbolStart, symbolEnd] = symbols.map((symbol) => symbol.charCodeAt(0));\n\n let code,\n level = 0,\n pos = start;\n\n if (str.charCodeAt(pos) === 0x3c /* < */) {\n return parseSimpleLink(str, start + 1);\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) {\n break;\n }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7f) {\n break;\n }\n\n if (code === 0x5c /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) {\n break;\n }\n pos += 2;\n continue;\n }\n\n if (code === symbolStart /* ( or [ */) {\n level++;\n if (level > 32) {\n return null;\n }\n }\n\n if (code === symbolEnd /* ) or ] */) {\n if (level === 0) {\n break;\n }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) {\n return null;\n }\n if (level !== 0) {\n return null;\n }\n\n return str.slice(start, pos);\n}\n\nfunction parseLinkTitle(str: string, start: number) {\n let code,\n prev,\n level = 0,\n pos = start;\n\n while (pos >= 0) {\n code = str.charCodeAt(pos);\n prev = str.charCodeAt(pos - 1);\n\n // ascii control characters\n if (code < 0x20 || code === 0x7f) {\n break;\n }\n\n if (prev === 0x5c /* \\ */) {\n pos -= 2;\n continue;\n }\n\n if (code === 93 /* ] */) {\n level++;\n if (level > 32) {\n return null;\n }\n }\n\n if (code === 91 /* [ */) {\n if (level === 1) {\n break;\n }\n level--;\n }\n\n pos--;\n }\n\n return str.slice(pos + 1, start);\n}\n\nfunction parseLinkOptions(str: string, start: number): ImageOptions {\n const max = str.length;\n const options: ImageOptions = {\n width: undefined,\n height: undefined,\n inline: undefined,\n };\n let code,\n level = 0,\n pos = start,\n startOption = start;\n\n if (str[pos - 1] !== ')') {\n level--;\n }\n if (str.charCodeAt(pos) !== 0x7b /* { */ && level === 0) {\n return options;\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x29 /* ) */ && level === -1) {\n if (str.charCodeAt(pos + 1) !== 0x7b) {\n return options;\n }\n level++;\n }\n\n if (code === 0x7b /* { */ && level > -1) {\n level++;\n startOption = pos + 1;\n if (level > 32) {\n return options;\n }\n }\n\n if (code === 0x7d /* } */) {\n if (level === 1) {\n level--;\n break;\n }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos || level !== 0) {\n return options;\n }\n\n const attrRegex = /(\\w+)=(?:'([^']*)'|\"([^\"]*)\"|(\\S+))/g;\n const optionsString = str.slice(startOption, pos);\n let match;\n\n while ((match = attrRegex.exec(optionsString)) !== null) {\n const key = match[1] as keyof ImageOptions;\n const value = match[2] || match[3] || match[4];\n\n if (key === 'inline') {\n options[key] = value === 'true';\n } else {\n options[key] = value;\n }\n }\n\n return options;\n}\n\nfunction parseSimpleLink(str: string, start: number) {\n const max = str.length;\n\n let code,\n pos = start;\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0a /* \\n */) {\n return null;\n }\n if (code === 0x3c /* < */) {\n return null;\n }\n if (code === 0x3e /* > */) {\n return str.slice(start, pos);\n }\n if (code === 0x5c /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return null;\n}\n\nexport function filterRanges<T extends {location: Location}>(\n excludes: Location[],\n infos: T[],\n): T[] {\n const contains = (exclude: Location, point: Location) => {\n return (\n (exclude[1] >= point[0] && exclude[1] <= point[1]) ||\n (exclude[0] >= point[0] && exclude[0] < point[1]) ||\n (exclude[0] < point[0] && exclude[1] >= point[1])\n );\n };\n\n return infos.filter((item) => {\n return !excludes.some((exclude) => contains(exclude, item.location));\n });\n}\n\nexport function parseHeading(content: string) {\n const anchors = [];\n const commonHeading = content.match(/^#+/);\n const alternateHeading = content[content.length - 1];\n const alternaleLevels = ['-', '='];\n const level = commonHeading\n ? commonHeading[0].length\n : alternaleLevels.indexOf(alternateHeading) + 1;\n\n if (commonHeading) {\n content = content.replace(/^#+\\s*/, '');\n } else {\n content = content.replace(/\\n[-=]+$/, '');\n }\n\n const ANCHOR = /[^[]{(#[^}]+)}/g;\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = ANCHOR.exec(content))) {\n anchors.push(match[1]);\n content = content.replace(match[0], '');\n ANCHOR.lastIndex -= match[0].length;\n }\n\n const title = content.trim();\n\n return {anchors, title, level};\n}\n", "import type {LoaderContext} from '../loader';\nimport type {AssetInfo} from '../types';\n\nimport {rebasePath} from '~/core/utils';\n\nimport {filterRanges, findDefs, findLinksInfo, findPcImages} from '../utils';\n\nexport function resolveAssets(this: LoaderContext, content: string) {\n const assets: AssetInfo[] = [];\n\n const exclude = [\n ...this.api.deps.get().map(({location}) => location),\n ...this.api.comments.get(),\n ...this.api.blockCodes.get(),\n ];\n\n const defs = filterRanges(exclude, findDefs(content));\n const links = filterRanges(exclude, findLinksInfo(content));\n const pcImages = filterRanges(exclude, findPcImages(content));\n\n for (const info of [...defs, ...links, ...pcImages]) {\n try {\n if (info.path !== null) {\n info.path = rebasePath(this.path, decodeURIComponent(info.path) as RelativePath);\n }\n\n assets.push(info);\n } catch (error) {\n this.logger.error(`Error processing asset from ${this.path} to ${info.path}: ${error}`);\n }\n }\n\n this.api.assets.set([...assets]);\n\n return content;\n}\n", "import type {Location} from '../types';\nimport type {LoaderContext} from '../loader';\n\nimport {filterRanges} from '../utils';\n\nexport function resolveHeadings(this: LoaderContext, content: string) {\n const headings = [];\n const exclude = [...this.api.comments.get()];\n\n const heading = /(?<=^|\\n)([#=-])/g;\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = heading.exec(content))) {\n const [result, location] =\n match[1] === '#'\n ? findCommonHeading(match.index, content)\n : findAlternateHeading(match.index, content);\n\n if (result) {\n headings.push({content: result, location});\n heading.lastIndex = location[1];\n }\n }\n\n this.api.headings.set(filterRanges(exclude, headings));\n\n return content;\n}\n\nconst SPACE = /[ \\t]/;\n\nfunction findCommonHeading(start: number, content: string): [string, Location] | never[] {\n let title = '';\n\n let index = start;\n while (index < content.length) {\n if (index - start > 6) {\n return [];\n }\n\n if (content[index] === '#') {\n index++;\n } else if (content[index].match(SPACE)) {\n break;\n } else {\n return [];\n }\n }\n\n while (index < content.length) {\n if (content[index + 1] && content[index] !== '\\n') {\n title += content[index];\n index++;\n } else if (title.trim()) {\n return [content.slice(start, index), [start, index]];\n } else {\n return [];\n }\n }\n\n return [];\n}\n\nfunction findAlternateHeading(start: number, content: string): [string, Location] | never[] {\n const delim = content[start];\n const newline = [];\n\n let title = '';\n\n let end = start;\n while (end < content.length) {\n if (content[end] === delim) {\n end++;\n } else if (content[end] === '\\n' || !content[end + 1]) {\n break;\n } else {\n return [];\n }\n }\n\n let index = start - 1;\n while (index >= 0) {\n const isContentStart = !index;\n const isTitleStart = newline.length === 2 && !content.slice(...newline).trim();\n\n if (newline.length && !isTitleStart) {\n newline.length = 1;\n }\n\n if (!isTitleStart) {\n title = content[index] + title;\n }\n\n if (isContentStart || isTitleStart) {\n const clean = title.trimStart();\n if (clean) {\n return [content.slice(start - clean.length, end), [start - clean.length, end]];\n } else {\n return [];\n }\n }\n\n if (content[index] === '\\n') {\n newline.unshift(index);\n }\n\n index--;\n }\n\n return [];\n}\n", "import type {LoaderContext} from '../loader';\n\nexport function resolveNoTranslate(this: LoaderContext, content: string) {\n if (this.mode === 'translate') {\n return content;\n }\n\n content = resolveContainerDirectives(content);\n\n content = resolveLeafBlockDirectives(content);\n\n content = resolveInlineDirectives(content);\n\n return content;\n}\n\nfunction resolveContainerDirectives(content: string): string {\n const lines = content.split('\\n');\n const result = [];\n\n const stack = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.trim().startsWith(':::')) {\n const directiveLine = line.trim();\n\n if (directiveLine === ':::') {\n if (stack.length > 0) {\n const lastDirective = stack.pop();\n\n if (lastDirective === 'no-translate' && stack.length === 0) {\n continue;\n }\n\n result.push(line);\n }\n } else {\n const directiveMatch = directiveLine.match(/^:::\\s*([^\\s]+)/);\n const directiveName = directiveMatch ? directiveMatch[1] : '';\n\n if (directiveName === 'no-translate') {\n stack.push('no-translate');\n continue;\n } else {\n stack.push(directiveName);\n result.push(line);\n }\n }\n } else {\n result.push(line);\n }\n }\n\n return result.join('\\n');\n}\n\nfunction resolveLeafBlockDirectives(content: string): string {\n const blockRegex = /::\\s*no-translate\\s*\\[([\\s\\S]*?)\\]/g;\n\n return content.replace(blockRegex, (_, innerContent) => {\n return innerContent;\n });\n}\n\nfunction resolveInlineDirectives(content: string): string {\n const inlineRegex = /(?<![:]):no-translate\\s*\\[([\\s\\S]*?)\\]/g;\n\n return content.replace(inlineRegex, (_, innerContent) => {\n return innerContent;\n });\n}\n", "import type {LoaderContext} from '../loader';\nimport type Token from 'markdown-it/lib/token';\n\nimport MarkdownIt from 'markdown-it';\n// @ts-ignore\n// import meta from 'markdown-it-meta';\n// @ts-ignore\n// import sup from 'markdown-it-sup';\n// @ts-ignore\nimport deflist from 'markdown-it-deflist';\n// import cut from '@diplodoc/transform/lib/plugins/cut';\n// import checkbox from '@diplodoc/transform/lib/plugins/checkbox';\n// import monospace from '@diplodoc/transform/lib/plugins/monospace';\n// import imsize from '@diplodoc/transform/lib/plugins/imsize';\n// import file from '@diplodoc/transform/lib/plugins/file';\n// import video from '@diplodoc/transform/lib/plugins/video';\nimport yfmTable from '@diplodoc/transform/lib/plugins/table';\n\nfunction computeLineStarts(lines: string[]): number[] {\n const lineStarts: number[] = [0];\n for (let i = 1; i < lines.length; i++) {\n // const lineEndingLength = lines[i - 1].endsWith('\\r') ? 2 : 1;\n lineStarts[i] = lineStarts[i - 1] + lines[i - 1].length + 1;\n }\n return lineStarts;\n}\n\nconst lineToCharPosition = (line: number, lineStarts: number[], content: string): number =>\n line >= lineStarts.length ? content.length : lineStarts[line];\n\nfunction calculateAdjustedEnd(\n endLine: number,\n lineStarts: number[],\n lines: string[],\n content: string,\n): number {\n let end = content.length;\n if (endLine <= lineStarts.length) {\n end = endLine === 0 ? 0 : lineStarts[endLine - 1] + lines[endLine - 1].length;\n }\n return endLine <= lines.length && endLine > 0 ? end + 1 : end;\n}\n\n// Process block code tokens (fence and code_block)\nfunction processBlockCode(\n token: Token,\n lineStarts: number[],\n lines: string[],\n content: string,\n codes: Array<[number, number]>,\n) {\n if (!token.map || token.map.length !== 2) {\n return;\n }\n\n const [startLine, endLine] = token.map;\n\n const start = lineToCharPosition(startLine, lineStarts, content);\n\n let adjustedEnd: number;\n if (token.type === 'fence' && endLine <= lines.length) {\n const endLineContent = lines[endLine - 1] || '';\n const fenceEndIndex = endLineContent.indexOf(token.markup);\n if (fenceEndIndex > -1) {\n const lineStart = lineStarts[endLine - 1] || 0;\n const fenceEndPos = lineStart + fenceEndIndex + token.markup.length;\n adjustedEnd = fenceEndPos;\n } else {\n adjustedEnd = calculateAdjustedEnd(endLine, lineStarts, lines, content);\n }\n } else {\n adjustedEnd = calculateAdjustedEnd(endLine, lineStarts, lines, content);\n }\n\n codes.push([start, adjustedEnd]);\n}\n\n// Check specific attribute in image part\nfunction checkAttribute(\n imagePart: string,\n matchStart: number,\n codeText: string | null,\n start: number | undefined,\n end: number | undefined,\n regex: RegExp,\n getAttrStart: (matchStart: number, imagePart: string) => number,\n): boolean {\n const match = imagePart.match(regex);\n if (match) {\n if (codeText !== null) {\n // Check if code text is in attributes\n if (match[1].includes(codeText)) {\n return true;\n }\n } else if (start !== undefined && end !== undefined) {\n // Check if code range falls within attributes\n const attrStart = getAttrStart(matchStart, imagePart);\n const attrEnd = attrStart + match[0].length;\n if (start >= attrStart && end <= attrEnd) {\n return true;\n }\n }\n }\n return false;\n}\n\n// Check attributes in image part\nfunction checkImageAttributes(\n imagePart: string,\n matchStart: number,\n codeText: string | null,\n start?: number,\n end?: number,\n): {braceMatch: boolean; quoteMatch: boolean} {\n // Check attributes in curly braces {...}\n const braceMatch = checkAttribute(\n imagePart,\n matchStart,\n codeText,\n start,\n end,\n /\\s*{([^}]*)}/,\n (matchStart, imagePart) => matchStart + imagePart.indexOf('{'),\n );\n\n // Check title attribute in quotes \"...\"\n const quoteMatch = checkAttribute(\n imagePart,\n matchStart,\n codeText,\n start,\n end,\n /\\s*\"([^\"]*)\"/,\n (matchStart, imagePart) => matchStart + imagePart.indexOf('\"'),\n );\n\n return {braceMatch, quoteMatch};\n}\n\n// Add code to array and update position\nfunction addCodeAndUpdatePosition(\n startIndex: number,\n endIndex: number,\n content: string,\n codes: Array<[number, number]>,\n parentStartPos: number,\n): number {\n // Check if this code is inside image attributes\n const insideAttrs = isInsideImageAttributes(content, startIndex, endIndex);\n if (!insideAttrs) {\n codes.push([startIndex, endIndex]);\n }\n\n // Update parentStartPos to avoid finding the same match again\n return insideAttrs ? parentStartPos : Math.max(parentStartPos, endIndex);\n}\n\n// Process inline code tokens\nfunction processInlineCode(\n token: Token,\n content: string,\n parentStartPos: number,\n codes: Array<[number, number]>,\n lineStarts: number[],\n lines: string[],\n): number {\n if (!token.markup || !token.content) {\n return parentStartPos;\n }\n\n // Use token's position information if available\n if (token.map && token.map.length === 2) {\n const [startLine, _endLine] = token.map;\n const start = lineToCharPosition(startLine, lineStarts, content);\n\n // Find the exact position of the inline code within the line\n const lineContent = lines[startLine] || '';\n const searchPattern = token.markup + token.content + token.markup;\n const patternIndex = lineContent.indexOf(searchPattern);\n\n if (patternIndex !== -1) {\n const startIndex = start + patternIndex;\n const endIndex = startIndex + searchPattern.length;\n\n return addCodeAndUpdatePosition(startIndex, endIndex, content, codes, parentStartPos);\n }\n } else {\n const searchPattern = token.markup + token.content + token.markup;\n const startIndex = content.indexOf(searchPattern, parentStartPos);\n\n if (startIndex !== -1) {\n const endIndex = startIndex + searchPattern.length;\n\n return addCodeAndUpdatePosition(startIndex, endIndex, content, codes, parentStartPos);\n }\n }\n\n return parentStartPos;\n}\n\n// Function to check if code is inside image attributes\nfunction isInsideImageAttributes(content: string, start: number, end: number): boolean {\n // Regular expression to find images with attributes\n // Looking for pattern ![...](...) with optional \"title\" and/or {...} attributes\n // Considering multiline images with 's' flag (dotAll)\n const imageRegex = /!\\[[^\\]]*\\]\\([^)]*\\)(?:\\s*\"[^\"]*\")?(?:\\s*{[^}]*})?/gs;\n\n // First check if code is inside attributes of a specific image\n let match;\n while ((match = imageRegex.exec(content)) !== null) {\n // Start and end of the entire match\n const matchStart = match.index;\n const matchEnd = match.index + match[0].length;\n\n // Check if code range falls within this match\n if (start >= matchStart && end <= matchEnd) {\n // Now check if code is in attributes\n const imagePart = match[0];\n const {braceMatch, quoteMatch} = checkImageAttributes(\n imagePart,\n matchStart,\n null,\n start,\n end,\n );\n if (braceMatch || quoteMatch) {\n return true;\n }\n }\n }\n\n // Additional check: if code is in attributes of any image in the document,\n // then it should not be marked as code block\n const codeContent = content.substring(start, end);\n const codeText = codeContent.replace(/`/g, ''); // Remove backticks\n\n // Find all images in the document\n const allImagesRegex = /!\\[[^\\]]*\\]\\([^)]*\\)(?:\\s*\"[^\"]*\")?(?:\\s*{[^}]*})?/gs;\n let imageMatch;\n while ((imageMatch = allImagesRegex.exec(content)) !== null) {\n // Check if code is in image attributes\n const imagePart = imageMatch[0];\n const {braceMatch, quoteMatch} = checkImageAttributes(\n imagePart,\n imageMatch.index,\n codeText,\n );\n if (braceMatch || quoteMatch) {\n return true;\n }\n }\n\n // Additional check for YFM tables: if code is in one table cell,\n // and image in another cell of the same row, then code should not be marked as code block\n // Check if code is in YFM table context\n const lines = content.split('\\n');\n let lineIndex = 0;\n let charCount = 0;\n\n // Find the line where the code is located\n for (let i = 0; i < lines.length; i++) {\n if (charCount <= start && start < charCount + lines[i].length + 1) {\n lineIndex = i;\n break;\n }\n charCount += lines[i].length + 1;\n }\n\n // Check if line is in YFM table context\n if (lineIndex > 0 && lineIndex < lines.length - 1) {\n const prevLine = lines[lineIndex - 1];\n const currentLine = lines[lineIndex];\n const nextLine = lines[lineIndex + 1];\n\n // Check if previous line is table start\n if (prevLine.trim().startsWith('#|')) {\n // Check if next line is table end\n if (nextLine.trim().startsWith('|#')) {\n // Check if current line contains image\n if (currentLine.includes('![') && currentLine.includes('](')) {\n // In YFM table, if code is in one cell and image in another,\n // then code should not be marked as code block\n // We need to check if code is in the same line as image\n return true;\n }\n }\n }\n }\n\n return false;\n}\n\n// Process inline tokens that may contain inline code\nfunction processInlineToken(\n token: Token,\n lineStarts: number[],\n content: string,\n parentStartPos: number,\n): number {\n if (!token.children || token.children.length === 0) {\n return parentStartPos;\n }\n\n let inlineStartPos = parentStartPos;\n if (token.map && token.map.length === 2) {\n const [startLine] = token.map;\n inlineStartPos = lineToCharPosition(startLine, lineStarts, content);\n }\n\n return inlineStartPos;\n}\n\nexport function resolveBlockCodes(this: LoaderContext, content: string) {\n const md = new MarkdownIt({html: true});\n const diplodocOptions = {\n notesAutotitle: false,\n path: '',\n };\n\n // md.disable('text_join');\n // md.disable('entity');\n\n // md.use(meta, diplodocOptions);\n // md.use(cut, diplodocOptions);\n // md.use(sup, diplodocOptions);\n md.use(deflist, diplodocOptions);\n // md.use(checkbox, diplodocOptions);\n // md.use(monospace, diplodocOptions);\n // md.use(imsize, diplodocOptions);\n // md.use(file, diplodocOptions);\n // md.use(video, diplodocOptions);\n md.use(yfmTable, diplodocOptions);\n\n const tokens = md.parse(content, {});\n\n const codes: Array<[number, number]> = [];\n\n const lines = content.split('\\n');\n const lineStarts = computeLineStarts(lines);\n\n function extractCodeBlocks(\n tokens: Token[],\n parentStartPos = 0,\n parentType: string | null = null,\n ) {\n for (const token of tokens) {\n let currentParentStartPos = parentStartPos;\n\n if (token.type === 'fence' || token.type === 'code_block') {\n processBlockCode(token, lineStarts, lines, content, codes);\n } else if (token.type === 'inline') {\n currentParentStartPos = processInlineToken(\n token,\n lineStarts,\n content,\n parentStartPos,\n );\n\n if (token.children && token.children.length > 0) {\n extractCodeBlocks(token.children, currentParentStartPos, token.type);\n }\n\n continue;\n } else if (token.type === 'code_inline') {\n // Skip code_inline tokens that are children of image tokens\n if (parentType !== 'image') {\n currentParentStartPos = processInlineCode(\n token,\n content,\n parentStartPos,\n codes,\n lineStarts,\n lines,\n );\n }\n }\n\n if (token.children && token.children.length > 0 && token.type !== 'inline') {\n extractCodeBlocks(token.children, currentParentStartPos, token.type);\n }\n }\n }\n\n extractCodeBlocks(tokens);\n\n this.api.blockCodes.set(codes);\n\n return content;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type {VFile} from '~/core/utils';\nimport type {Collect, Plugin} from './types';\nimport type {Meta} from '~/core/meta';\n\nimport {AsyncSeriesHook, AsyncSeriesWaterfallHook} from 'tapable';\n\nimport {generateHooksAccess} from '~/core/utils';\n\nexport function hooks(name: string) {\n return {\n Collects: new AsyncSeriesWaterfallHook<[Collect[]]>(['collects'], `${name}.Collects`),\n Plugins: new AsyncSeriesWaterfallHook<[Plugin[]]>(['plugins'], `${name}.Plugins`),\n Loaded: new AsyncSeriesHook<[string, DeepFrozen<Meta>, NormalizedPath]>(\n ['markdown', 'meta', 'path'],\n `${name}.Loaded`,\n ),\n Resolved: new AsyncSeriesHook<[string, NormalizedPath]>(\n ['markdown', 'path'],\n `${name}.Resolved`,\n ),\n Dump: new AsyncSeriesHook<VFile<string>>(['vfile'], `${name}.Dump`),\n };\n}\n\nconst [getHooks, withHooks] = generateHooksAccess('Markdown', hooks);\n\nexport {getHooks, withHooks};\n", "import type {Run as BaseRun} from '~/core/run';\nimport type {VarsService} from '~/core/vars';\nimport type {Meta, MetaService} from '~/core/meta';\nimport type {LoaderContext, TransformMode} from './loader';\nimport type {\n AssetInfo,\n Collect,\n EntryGraph,\n EntryInfo,\n GraphInfo,\n HeadingInfo,\n IncludeInfo,\n Location,\n Plugin,\n} from './types';\n\nimport {dirname, join} from 'node:path';\nimport {SourceMap} from '@diplodoc/liquid';\n\nimport {Buckets, Defer, Graph, VFile, all, bounded, fullPath, normalizePath} from '~/core/utils';\n\nimport {getHooks, withHooks} from './hooks';\nimport {LoaderAPI, loader} from './loader';\nimport {parseHeading} from './utils';\n\ntype MarkdownServiceConfig = {\n outputFormat: `${TransformMode}`;\n template: {\n enabled: boolean;\n features: {\n substitutions: boolean;\n conditions: boolean;\n };\n scopes: {\n code: boolean;\n };\n };\n};\n\ntype Run = BaseRun<MarkdownServiceConfig> & {\n meta: MetaService;\n vars: VarsService;\n};\n\ntype Options = {\n mode: 'build' | 'translate';\n};\n\nfunction hash(path: NormalizedPath, from?: NormalizedPath) {\n return `${path}${from ? '+' + from : ''}`;\n}\n\nconst byLocation = (a: HeadingInfo, b: HeadingInfo) => a.location[0] - b.location[0];\n\n@withHooks\nexport class MarkdownService {\n readonly name = 'Markdown';\n\n get logger() {\n return this.run.logger;\n }\n\n get plugins() {\n return this._plugins.slice();\n }\n\n get collects() {\n return this._collects.slice();\n }\n\n get config() {\n return this.run.config;\n }\n\n private run: Run;\n\n private _collects: Collect[] = [];\n\n private _plugins: Plugin[] = [];\n\n private pathToMeta = new Buckets<Meta>();\n\n private pathToComments = new Buckets<Location[]>();\n\n private pathToDeps = new Buckets<IncludeInfo[]>();\n\n private pathToAssets = new Buckets<AssetInfo[]>();\n\n private pathToHeadings = new Buckets<HeadingInfo[]>();\n\n private pathToSourcemap = new Buckets<Record<number | string, string>>();\n\n private cache: Hash<Promise<string> | string> = {};\n\n private options;\n\n constructor(run: Run, options: Options = {mode: 'build'}) {\n this.run = run;\n this.options = options;\n }\n\n @bounded async init() {\n this._collects = await getHooks(this).Collects.promise(this._collects);\n this._plugins = await getHooks(this).Plugins.promise(this._plugins);\n }\n\n @bounded async load(path: RelativePath, from?: NormalizedPath) {\n const file = normalizePath(path);\n const key = hash(file, from);\n\n if (key in this.cache) {\n return this.cache[key];\n }\n\n const defer = new Defer();\n\n this.cache[key] = defer.promise;\n\n try {\n const source = normalizePath(join(this.run.input, file)) as AbsolutePath;\n const raw = await this.run.read(source);\n const vars = this.run.vars.for(file, from);\n\n const context = this.loaderContext(file, raw, vars, this.proxy(key));\n const content = await loader.call(context, raw);\n\n // At this point all internal states are fully resolved.\n // So we don't expect Defer here.\n const meta = context.api.meta.get() as Meta;\n\n await getHooks(this).Loaded.promise(raw, meta, file);\n\n this.run.meta.addMetadata(file, vars.__metadata);\n this.run.meta.addSystemVars(file, vars.__system);\n this.run.meta.add(file, meta);\n\n this.cache[key] = content;\n defer.resolve(content);\n\n // TODO: this may trigger uncaught exceptions\n // But if we move this two lines above, then program exits unexpectedly\n await getHooks(this).Resolved.promise(content, file);\n } catch (error) {\n defer.reject(error);\n }\n\n return defer.promise;\n }\n\n @bounded async dump(file: NormalizedPath, markdown?: string) {\n const vfile = new VFile<string, EntryInfo>(file, markdown || (await this.load(file)));\n\n vfile.info = {title: '', headings: []};\n\n await getHooks(this).Dump.promise(vfile);\n\n return vfile;\n }\n\n async meta(path: RelativePath) {\n return this._meta(normalizePath(path));\n }\n\n async deps(path: RelativePath) {\n return this._deps(normalizePath(path));\n }\n\n async graph(path: RelativePath) {\n return this._graph(normalizePath(path));\n }\n\n async relations(path: RelativePath) {\n return this._relations(normalizePath(path));\n }\n\n async assets(path: RelativePath) {\n return this._assets(normalizePath(path));\n }\n\n async headings(path: RelativePath) {\n return this._headings(normalizePath(path));\n }\n\n async titles(path: RelativePath) {\n const file = normalizePath(path);\n\n const titles: Hash<string> = {};\n\n try {\n const headings = await this.headings(file);\n const contents = headings.map(({content}) => content);\n\n for (const content of contents) {\n const {level, title, anchors} = parseHeading(content);\n\n if (level === 1 && !titles['#']) {\n titles['#'] = title;\n }\n\n for (const anchor of anchors) {\n titles[anchor] = title;\n }\n }\n } catch {\n // This is acceptable.\n // If this is a real file and someone depends on his titles,\n // then we throw exception in md plugin.\n }\n\n return titles;\n }\n\n @bounded async inspect(path: RelativePath, raw: string, vars: Hash) {\n const file = normalizePath(path);\n const api = new LoaderAPI();\n const context = this.loaderContext(file, raw, vars, api);\n const content = await loader.call(context, raw);\n\n const deps = api.deps.get();\n const assets = [...api.assets.get()];\n\n return {content, deps, assets};\n }\n\n remap(path: RelativePath, line: number): number {\n const file = normalizePath(path);\n const sourcemap = this.pathToSourcemap.get(file);\n\n if (!sourcemap) {\n return line;\n }\n\n return Number(sourcemap[line]) || line;\n }\n\n release(path: NormalizedPath, from?: NormalizedPath) {\n const key = hash(path, from);\n\n delete this.cache[key];\n this.pathToDeps.delete(key);\n this.pathToMeta.delete(key);\n this.pathToAssets.delete(key);\n this.pathToHeadings.delete(key);\n this.pathToComments.delete(key);\n this.pathToSourcemap.delete(key);\n }\n\n private async _meta(file: NormalizedPath, from?: NormalizedPath) {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n return this.pathToMeta.get(key);\n }\n\n private async _deps(file: NormalizedPath, from?: NormalizedPath): Promise<IncludeInfo[]> {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n const deps = this.pathToDeps.get(key) || [];\n const internals: IncludeInfo[][] = await all(\n (this.pathToDeps.get(key) || []).map(async ({path}) => {\n return this._deps(path, from || file);\n }),\n );\n\n return deps.concat(...internals);\n }\n\n private async _graph(path: NormalizedPath, from?: NormalizedPath): Promise<EntryGraph> {\n const key = hash(path, from);\n\n const content = await this.load(path, from);\n const assets = this.pathToAssets.get(key) || [];\n const deps = await all(\n (this.pathToDeps.get(key) || []).map(async (dep) => {\n return {\n ...dep,\n ...(await this._graph(dep.path, from || path)),\n };\n }),\n );\n\n return {path, content, deps, assets};\n }\n\n private async _relations(\n path: NormalizedPath,\n from?: NormalizedPath,\n ): Promise<Graph<GraphInfo>> {\n const key = hash(path, from);\n const graph = new Graph<GraphInfo>();\n\n graph.addNode(path, {type: 'entry'});\n\n await this.load(path, from);\n await all(\n (this.pathToDeps.get(key) || []).map(async (dep) => {\n graph.consume(await this._relations(dep.path, from || path));\n graph.setNodeData(dep.path, {type: 'source'});\n graph.addDependency(path, dep.path);\n }),\n );\n\n (this.pathToAssets.get(key) || []).map(async (asset) => {\n if (['image', 'video'].includes(asset.type)) {\n graph.addNode(asset.path);\n graph.setNodeData(asset.path, {type: 'resource'});\n graph.addDependency(path, asset.path);\n }\n\n if (['link'].includes(asset.type) && asset.autotitle) {\n graph.addNode(asset.path);\n graph.setNodeData(asset.path, {type: 'source'});\n graph.addDependency(path, asset.path);\n }\n });\n\n const meta = this.run.meta.get(path);\n const resources = ([] as string[]).concat(meta.script || [], meta.style || []);\n for (const resource of resources) {\n const file = normalizePath(join(dirname(path), resource));\n graph.addNode(file);\n graph.setNodeData(file, {type: 'resource'});\n graph.addDependency(path, file);\n }\n\n return graph;\n }\n\n private async _assets(file: NormalizedPath, from?: NormalizedPath) {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n const assets = this.pathToAssets.get(key) || [];\n const internals: AssetInfo[][] = await all(\n (this.pathToDeps.get(key) || []).map(async ({path}) => {\n return this._assets(path, from || file);\n }),\n );\n\n return assets.concat(...internals);\n }\n\n private async _headings(file: NormalizedPath, from?: NormalizedPath) {\n const key = hash(file, from);\n\n await this.load(file, from);\n\n const headings = this.pathToHeadings.get(key) || [];\n const internals: HeadingInfo[][] = await all(\n (this.pathToDeps.get(key) || []).map(async ({path, location}) => {\n const headings = await this._headings(path, from || file);\n return headings.map((heading) => ({...heading, location}));\n }),\n );\n\n return headings.concat(...internals).sort(byLocation);\n }\n\n private proxy(key: string) {\n return {\n deps: this.pathToDeps.bind(key),\n assets: this.pathToAssets.bind(key),\n meta: this.pathToMeta.bind(key),\n comments: this.pathToComments.bind(key),\n headings: this.pathToHeadings.bind(key),\n sourcemap: this.pathToSourcemap.bind(key),\n };\n }\n\n private loaderContext(\n path: NormalizedPath,\n raw: string,\n vars: Hash,\n api?: Partial<LoaderAPI>,\n ): LoaderContext {\n return {\n path,\n vars,\n logger: this.logger,\n readFile: (path: RelativePath) => {\n return this.run.read(join(this.run.input, path));\n },\n emitFile: async (file: NormalizedPath, content: string) => {\n const rootPath = fullPath(file, path);\n await this.run.write(join(this.run.input, rootPath), content, true);\n },\n api: new LoaderAPI(api),\n collects: this.collects,\n sourcemap: new SourceMap(raw),\n settings: {\n substitutions: this.config.template.features.substitutions,\n conditions: this.config.template.features.conditions,\n conditionsInCode: this.config.template.scopes.code,\n keepNotVar: this.config.outputFormat === 'md',\n },\n options: {\n disableLiquid: !this.config.template.enabled,\n },\n mode: this.options.mode,\n };\n }\n}\n", "import type {LiquidContext, SourceMap} from '@diplodoc/liquid';\nimport type {Meta} from '~/core/meta';\nimport type {Logger} from '~/core/logger';\nimport type {Bucket} from '~/core/utils';\nimport type {AssetInfo, Collect, HeadingInfo, IncludeInfo, Location} from './types';\n\nimport {merge} from 'lodash';\n\nimport {bucket} from '~/core/utils';\n\nimport {mangleFrontMatter} from './loader/mangle-frontmatter';\nimport {templateContent} from './loader/template-content';\nimport {resolveComments} from './loader/resolve-comments';\nimport {resolveDependencies} from './loader/resolve-deps';\nimport {resolveAssets} from './loader/resolve-assets';\nimport {resolveHeadings} from './loader/resolve-headings';\nimport {resolveNoTranslate} from './loader/resolve-no-translate';\nimport {resolveBlockCodes} from './loader/resolve-code';\n\nexport enum TransformMode {\n Html = 'html',\n Md = 'md',\n}\n\nexport class LoaderAPI {\n blockCodes: Bucket<Location[]>;\n comments: Bucket<Location[]>;\n deps: Bucket<IncludeInfo[]>;\n assets: Bucket<AssetInfo[]>;\n meta: Bucket<Meta>;\n headings: Bucket<HeadingInfo[]>;\n sourcemap: Bucket<Record<number | string, string>>;\n\n constructor(proxy: Partial<LoaderAPI> = {}) {\n this.blockCodes = proxy.blockCodes || bucket();\n this.deps = proxy.deps || bucket();\n this.assets = proxy.assets || bucket();\n this.meta = proxy.meta || bucket();\n this.comments = proxy.comments || bucket();\n this.headings = proxy.headings || bucket();\n this.sourcemap = proxy.sourcemap || bucket();\n }\n}\n\nexport type LoaderContext = LiquidContext & {\n path: NormalizedPath;\n vars: Hash;\n logger: Logger;\n emitFile(path: NormalizedPath, content: string): Promise<void>;\n readFile(path: NormalizedPath): Promise<string>;\n collects: Collect[];\n api: LoaderAPI;\n sourcemap: SourceMap;\n options: {\n disableLiquid: boolean;\n };\n mode: 'build' | 'translate';\n};\n\nexport async function loader(this: LoaderContext, content: string) {\n content = mangleFrontMatter.call(this, content);\n content = resolveNoTranslate.call(this, content);\n content = templateContent.call(this, content);\n content = await applyCollectPlugins.call(this, content);\n content = resolveBlockCodes.call(this, content);\n content = resolveComments.call(this, content);\n content = resolveDependencies.call(this, content);\n content = resolveAssets.call(this, content);\n content = resolveHeadings.call(this, content);\n\n this.api.sourcemap.set(this.sourcemap.dump());\n\n return content;\n}\n\nasync function applyCollectPlugins(this: LoaderContext, content: string) {\n let meta = {};\n\n for (const collect of this.collects) {\n let result = await collect.call(this, content, {});\n\n if (Array.isArray(result)) {\n meta = merge(meta, result[1] || {});\n result = result[0] as string;\n }\n\n if (result !== undefined) {\n content = result as string;\n }\n }\n\n return content;\n}\n", "import type {LoaderContext} from '../loader';\n\nimport {extractFrontMatter, liquidJson} from '@diplodoc/liquid';\n\nfunction safeExtractFrontmatter(this: LoaderContext, content: string) {\n return extractFrontMatter(content, {json: true});\n}\n\nexport function mangleFrontMatter(this: LoaderContext, rawContent: string) {\n const {vars, options} = this;\n const {disableLiquid} = options;\n\n const [frontmatter, content, rawFrontmatter] = safeExtractFrontmatter.call(this, rawContent);\n\n if (!rawFrontmatter) {\n this.api.meta.set({});\n return rawContent;\n }\n\n if (disableLiquid) {\n this.api.meta.set(frontmatter);\n } else {\n this.api.meta.set(liquidJson.call(this, frontmatter, vars));\n }\n\n this.sourcemap.delete(1, rawFrontmatter);\n\n return content;\n}\n", "import type {LoaderContext} from '../loader';\n\nimport {liquidSnippet} from '@diplodoc/liquid';\n\nexport function templateContent(this: LoaderContext, rawContent: string) {\n const {vars, options} = this;\n const {disableLiquid} = options;\n\n if (disableLiquid) {\n return rawContent;\n }\n\n const content = liquidSnippet.call(this, rawContent, vars, this.sourcemap);\n\n return content;\n}\n", "import type {LoaderContext} from '../loader';\n\nexport function resolveComments(this: LoaderContext, content: string) {\n const COMMENTS_CONTENTS = /<!-{2,}[\\s\\S]*?-{2,}>/g;\n const comments = [];\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = COMMENTS_CONTENTS.exec(content))) {\n comments.push([match.index, COMMENTS_CONTENTS.lastIndex] as [number, number]);\n }\n\n this.api.comments.set(comments);\n\n return content;\n}\n", "import type {IncludeInfo} from '../types';\nimport type {LoaderContext} from '../loader';\n\nimport {parseLocalUrl, rebasePath} from '~/core/utils';\n\nimport {filterRanges, findLink} from '../utils';\n\nexport function resolveDependencies(this: LoaderContext, content: string) {\n const includes = [];\n const exclude = [...this.api.comments.get()];\n\n // Include example: {% include [createfolder](create-folder.md) %}\n // Regexp result: [createfolder](create-folder.md)\n const INCLUDE_CONTENTS = /{%\\s*include\\s*.+?%}/g;\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = INCLUDE_CONTENTS.exec(content))) {\n // Ugly workaround for include examples\n // TODO: rewrite all inspect code on markdown-it parsing with minimal set of plugins\n if (content[match.index - 1] === '`') {\n continue;\n }\n\n const link = findLink(match[0]) as string;\n // TODO: warn about non local urls\n const include = parseLocalUrl<IncludeInfo>(link);\n\n if (include) {\n include.path = rebasePath(this.path, include.path as RelativePath);\n include.link = link;\n include.match = content.slice(match.index, INCLUDE_CONTENTS.lastIndex);\n include.location = [match.index, INCLUDE_CONTENTS.lastIndex];\n\n includes.push(include);\n }\n }\n\n this.api.deps.set(filterRanges(exclude, includes));\n\n return content;\n}\n", "import type {AssetInfo, Location} from './types';\nimport type {ImageOptions} from '@diplodoc/transform/lib/typings';\nimport type {ConstructorBlock, PageContent} from '@diplodoc/page-constructor-extension';\n\nimport {load as yamlLoad} from 'js-yaml';\n\nimport {MEDIA_FORMATS, parseLocalUrl, walkLinks} from '~/core/utils';\n\ntype AssetModifier = '!' | '@' | '';\n\nconst modifiers = {'!': 'image', '@': 'video', '': 'link'} as const;\n\nexport function findLink(content: string): string | undefined {\n const rx = /]\\(\\s*/g;\n const match = rx.exec(content);\n if (!match) {\n return undefined;\n }\n\n const link = parseLinkDestination(content, rx.lastIndex);\n\n if (link === null || link.match(/[${}]/)) {\n return undefined;\n }\n\n rx.lastIndex += link.length + 1;\n\n return link;\n}\n\nexport function extractImages(block: ConstructorBlock | string): string[] {\n const images: string[] = [];\n\n if (!block) {\n return images;\n }\n\n if (typeof block === 'string') {\n const trimmedBlock = block.trim();\n\n if (MEDIA_FORMATS.test(trimmedBlock) && trimmedBlock.split(/\\s+/).length === 1) {\n images.push(trimmedBlock);\n }\n\n return images;\n }\n\n walkLinks(block, (value) => {\n if (MEDIA_FORMATS.test(value) && value.split(/\\s+/).length === 1) {\n images.push(value);\n }\n });\n\n return images;\n}\n\nexport function parsePcBlocks(blocks: ConstructorBlock[] = [], images: string[] = []): string[] {\n for (const block of blocks) {\n images.push(...extractImages(block));\n }\n\n return images;\n}\n\nexport function getPcIconTitle(iconPath: string): string {\n const file = iconPath.split('/').pop() || iconPath;\n\n return file.replace(/\\.[^.]+$/, '');\n}\n\nexport function findPcImages(content: string): AssetInfo[] {\n const pcImages: AssetInfo[] = [];\n const openRegex = /^([ \\t]*):::\\s*page-constructor[ \\t]*\\r?\\n?/gm;\n\n let match: RegExpExecArray | null;\n\n while ((match = openRegex.exec(content))) {\n const indent = match[1] || '';\n const startIdx = openRegex.lastIndex;\n const closeRegex = new RegExp(`^${indent}:::[ \\\\t]*$`, 'mg');\n\n closeRegex.lastIndex = startIdx;\n\n const closeMatch = closeRegex.exec(content);\n\n if (!closeMatch) {\n continue;\n }\n\n const rawBlock = content.slice(startIdx, closeMatch.index);\n let data: PageContent;\n\n try {\n data = yamlLoad(rawBlock) as PageContent;\n } catch {\n continue;\n }\n\n const images = parsePcBlocks(data?.blocks as ConstructorBlock[], []);\n\n for (const img of images) {\n const parsed = parseLocalUrl(img);\n\n if (!parsed) {\n continue;\n }\n\n pcImages.push({\n ...parsed,\n type: 'image',\n subtype: 'image',\n title: getPcIconTitle(img),\n autotitle: false,\n hash: null,\n search: null,\n location: [match.index, closeRegex.lastIndex],\n // no inline svg inside page-constructor because we hasn't a location for asset\n options: {width: undefined, height: undefined, inline: false},\n });\n }\n\n openRegex.lastIndex = closeRegex.lastIndex;\n }\n\n return pcImages;\n}\n\nexport function findLinksInfo(content: string): AssetInfo[] {\n const links = find(/]\\(\\s*/g, content, (match, rx) => {\n const link = parseLinkDestination(content, rx.lastIndex);\n const title = parseLinkTitle(content, rx.lastIndex - match[0].length);\n const options = parseLinkOptions(content, rx.lastIndex + (link?.length || 0) + 1);\n\n // TODO: add more precise filter for unix compatible paths\n if (link === null || title === null || link.match(/[${}]/)) {\n return undefined;\n }\n\n const parsed = parseLocalUrl(link);\n if (!parsed) {\n return undefined;\n }\n\n const modifier = content[\n rx.lastIndex - match[0].length - title.length - 2\n ] as AssetModifier;\n const type = modifiers[modifier] || 'link';\n\n rx.lastIndex += link.length + 1;\n\n return {\n ...parsed,\n type,\n subtype: type === 'image' ? 'image' : null,\n title,\n autotitle: type === 'link' && (!title || title === '{#T}'),\n options,\n };\n });\n\n const referenceLinks = find(/]\\[\\s*/g, content, (match, rx) => {\n let link = parseLinkDestination(content, rx.lastIndex, ['[', ']']);\n let title = parseLinkTitle(content, rx.lastIndex - match[0].length);\n const options = parseLinkOptions(content, rx.lastIndex + (link?.length || 0) + 1);\n\n // TODO: add more precise filter for unix compatible paths\n if ((link === null && title === null) || link?.match(/[${}]/)) {\n return undefined;\n }\n title = title || '';\n link = link || title;\n\n const parsed = parseLocalUrl(link);\n if (!parsed) {\n return undefined;\n }\n\n const modifier = content[\n rx.lastIndex - match[0].length - title.length - 2\n ] as AssetModifier;\n const type = modifiers[modifier] || 'link';\n\n rx.lastIndex += (content[rx.lastIndex] === ']' ? 0 : link.length) + 1;\n\n return {\n ...parsed,\n type,\n subtype: 'reference',\n code: link,\n title,\n autotitle: type === 'link' && (!title || title === '{#T}'),\n options,\n };\n });\n\n return [...links, ...referenceLinks];\n}\n\nexport function findDefs(content: string): AssetInfo[] {\n return find(/^\\s*\\[(.*?)]:\\s*([^\\s]+)/gm, content, (match) => {\n const parsed = parseLocalUrl(match[2]);\n if (!parsed) {\n return undefined;\n }\n\n return {\n ...parsed,\n type: 'def',\n code: match[1] || undefined,\n title: '',\n autotitle: true,\n };\n });\n}\n\nfunction find(\n matcher: RegExp,\n content: string,\n map: (match: RegExpMatchArray, rx: RegExp) => Omit<AssetInfo, 'location'> | void,\n): AssetInfo[] {\n const links: AssetInfo[] = [];\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = matcher.exec(content))) {\n const result = map(match, matcher);\n if (!result) {\n continue;\n }\n\n if (result) {\n links.push({\n ...result,\n location: [match.index, matcher.lastIndex],\n });\n }\n }\n\n return links;\n}\n\nfunction parseLinkDestination(str: string, start: number, symbols = ['(', ')']) {\n const max = str.length;\n const [symbolStart, symbolEnd] = symbols.map((symbol) => symbol.charCodeAt(0));\n\n let code,\n level = 0,\n pos = start;\n\n if (str.charCodeAt(pos) === 0x3c /* < */) {\n return parseSimpleLink(str, start + 1);\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) {\n break;\n }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7f) {\n break;\n }\n\n if (code === 0x5c /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) {\n break;\n }\n pos += 2;\n continue;\n }\n\n if (code === symbolStart /* ( or [ */) {\n level++;\n if (level > 32) {\n return null;\n }\n }\n\n if (code === symbolEnd /* ) or ] */) {\n if (level === 0) {\n break;\n }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) {\n return null;\n }\n if (level !== 0) {\n return null;\n }\n\n return str.slice(start, pos);\n}\n\nfunction parseLinkTitle(str: string, start: number) {\n let code,\n prev,\n level = 0,\n pos = start;\n\n while (pos >= 0) {\n code = str.charCodeAt(pos);\n prev = str.charCodeAt(pos - 1);\n\n // ascii control characters\n if (code < 0x20 || code === 0x7f) {\n break;\n }\n\n if (prev === 0x5c /* \\ */) {\n pos -= 2;\n continue;\n }\n\n if (code === 93 /* ] */) {\n level++;\n if (level > 32) {\n return null;\n }\n }\n\n if (code === 91 /* [ */) {\n if (level === 1) {\n break;\n }\n level--;\n }\n\n pos--;\n }\n\n return str.slice(pos + 1, start);\n}\n\nfunction parseLinkOptions(str: string, start: number): ImageOptions {\n const max = str.length;\n const options: ImageOptions = {\n width: undefined,\n height: undefined,\n inline: undefined,\n };\n let code,\n level = 0,\n pos = start,\n startOption = start;\n\n if (str[pos - 1] !== ')') {\n level--;\n }\n if (str.charCodeAt(pos) !== 0x7b /* { */ && level === 0) {\n return options;\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x29 /* ) */ && level === -1) {\n if (str.charCodeAt(pos + 1) !== 0x7b) {\n return options;\n }\n level++;\n }\n\n if (code === 0x7b /* { */ && level > -1) {\n level++;\n startOption = pos + 1;\n if (level > 32) {\n return options;\n }\n }\n\n if (code === 0x7d /* } */) {\n if (level === 1) {\n level--;\n break;\n }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos || level !== 0) {\n return options;\n }\n\n const attrRegex = /(\\w+)=(?:'([^']*)'|\"([^\"]*)\"|(\\S+))/g;\n const optionsString = str.slice(startOption, pos);\n let match;\n\n while ((match = attrRegex.exec(optionsString)) !== null) {\n const key = match[1] as keyof ImageOptions;\n const value = match[2] || match[3] || match[4];\n\n if (key === 'inline') {\n options[key] = value === 'true';\n } else {\n options[key] = value;\n }\n }\n\n return options;\n}\n\nfunction parseSimpleLink(str: string, start: number) {\n const max = str.length;\n\n let code,\n pos = start;\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0a /* \\n */) {\n return null;\n }\n if (code === 0x3c /* < */) {\n return null;\n }\n if (code === 0x3e /* > */) {\n return str.slice(start, pos);\n }\n if (code === 0x5c /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return null;\n}\n\nexport function filterRanges<T extends {location: Location}>(\n excludes: Location[],\n infos: T[],\n): T[] {\n const contains = (exclude: Location, point: Location) => {\n return (\n (exclude[1] >= point[0] && exclude[1] <= point[1]) ||\n (exclude[0] >= point[0] && exclude[0] < point[1]) ||\n (exclude[0] < point[0] && exclude[1] >= point[1])\n );\n };\n\n return infos.filter((item) => {\n return !excludes.some((exclude) => contains(exclude, item.location));\n });\n}\n\nexport function parseHeading(content: string) {\n const anchors = [];\n const commonHeading = content.match(/^#+/);\n const alternateHeading = content[content.length - 1];\n const alternaleLevels = ['-', '='];\n const level = commonHeading\n ? commonHeading[0].length\n : alternaleLevels.indexOf(alternateHeading) + 1;\n\n if (commonHeading) {\n content = content.replace(/^#+\\s*/, '');\n } else {\n content = content.replace(/\\n[-=]+$/, '');\n }\n\n const ANCHOR = /[^[]{(#[^}]+)}/g;\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = ANCHOR.exec(content))) {\n anchors.push(match[1]);\n content = content.replace(match[0], '');\n ANCHOR.lastIndex -= match[0].length;\n }\n\n const title = content.trim();\n\n return {anchors, title, level};\n}\n", "import type {LoaderContext} from '../loader';\nimport type {AssetInfo} from '../types';\n\nimport {rebasePath} from '~/core/utils';\n\nimport {filterRanges, findDefs, findLinksInfo, findPcImages} from '../utils';\n\nexport function resolveAssets(this: LoaderContext, content: string) {\n const assets: AssetInfo[] = [];\n\n const exclude = [\n ...this.api.deps.get().map(({location}) => location),\n ...this.api.comments.get(),\n ...this.api.blockCodes.get(),\n ];\n\n const defs = filterRanges(exclude, findDefs(content));\n const links = filterRanges(exclude, findLinksInfo(content));\n const pcImages = filterRanges(exclude, findPcImages(content));\n\n for (const info of [...defs, ...links, ...pcImages]) {\n try {\n if (info.path !== null && !info.path?.startsWith('*') && !info.path?.includes('%')) {\n info.path = rebasePath(this.path, decodeURIComponent(info.path) as RelativePath);\n }\n\n assets.push(info);\n } catch (error) {\n this.logger.error(`Error processing asset from ${this.path} to ${info.path}: ${error}`);\n }\n }\n\n this.api.assets.set([...assets]);\n\n return content;\n}\n", "import type {Location} from '../types';\nimport type {LoaderContext} from '../loader';\n\nimport {filterRanges} from '../utils';\n\nexport function resolveHeadings(this: LoaderContext, content: string) {\n const headings = [];\n const exclude = [...this.api.comments.get()];\n\n const heading = /(?<=^|\\n)([#=-])/g;\n\n let match;\n // eslint-disable-next-line no-cond-assign\n while ((match = heading.exec(content))) {\n const [result, location] =\n match[1] === '#'\n ? findCommonHeading(match.index, content)\n : findAlternateHeading(match.index, content);\n\n if (result) {\n headings.push({content: result, location});\n heading.lastIndex = location[1];\n }\n }\n\n this.api.headings.set(filterRanges(exclude, headings));\n\n return content;\n}\n\nconst SPACE = /[ \\t]/;\n\nfunction findCommonHeading(start: number, content: string): [string, Location] | never[] {\n let title = '';\n\n let index = start;\n while (index < content.length) {\n if (index - start > 6) {\n return [];\n }\n\n if (content[index] === '#') {\n index++;\n } else if (content[index].match(SPACE)) {\n break;\n } else {\n return [];\n }\n }\n\n while (index < content.length) {\n if (content[index + 1] && content[index] !== '\\n') {\n title += content[index];\n index++;\n } else if (title.trim()) {\n return [content.slice(start, index), [start, index]];\n } else {\n return [];\n }\n }\n\n return [];\n}\n\nfunction findAlternateHeading(start: number, content: string): [string, Location] | never[] {\n const delim = content[start];\n const newline = [];\n\n let title = '';\n\n let end = start;\n while (end < content.length) {\n if (content[end] === delim) {\n end++;\n } else if (content[end] === '\\n' || !content[end + 1]) {\n break;\n } else {\n return [];\n }\n }\n\n let index = start - 1;\n while (index >= 0) {\n const isContentStart = !index;\n const isTitleStart = newline.length === 2 && !content.slice(...newline).trim();\n\n if (newline.length && !isTitleStart) {\n newline.length = 1;\n }\n\n if (!isTitleStart) {\n title = content[index] + title;\n }\n\n if (isContentStart || isTitleStart) {\n const clean = title.trimStart();\n if (clean) {\n return [content.slice(start - clean.length, end), [start - clean.length, end]];\n } else {\n return [];\n }\n }\n\n if (content[index] === '\\n') {\n newline.unshift(index);\n }\n\n index--;\n }\n\n return [];\n}\n", "import type {LoaderContext} from '../loader';\n\nexport function resolveNoTranslate(this: LoaderContext, content: string) {\n if (this.mode === 'translate') {\n return content;\n }\n\n content = resolveContainerDirectives(content);\n\n content = resolveLeafBlockDirectives(content);\n\n content = resolveInlineDirectives(content);\n\n return content;\n}\n\nfunction resolveContainerDirectives(content: string): string {\n const lines = content.split('\\n');\n const result = [];\n\n const stack = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.trim().startsWith(':::')) {\n const directiveLine = line.trim();\n\n if (directiveLine === ':::') {\n if (stack.length > 0) {\n const lastDirective = stack.pop();\n\n if (lastDirective === 'no-translate' && stack.length === 0) {\n continue;\n }\n\n result.push(line);\n }\n } else {\n const directiveMatch = directiveLine.match(/^:::\\s*([^\\s]+)/);\n const directiveName = directiveMatch ? directiveMatch[1] : '';\n\n if (directiveName === 'no-translate') {\n stack.push('no-translate');\n continue;\n } else {\n stack.push(directiveName);\n result.push(line);\n }\n }\n } else {\n result.push(line);\n }\n }\n\n return result.join('\\n');\n}\n\nfunction resolveLeafBlockDirectives(content: string): string {\n const blockRegex = /::\\s*no-translate\\s*\\[([\\s\\S]*?)\\]/g;\n\n return content.replace(blockRegex, (_, innerContent) => {\n return innerContent;\n });\n}\n\nfunction resolveInlineDirectives(content: string): string {\n const inlineRegex = /(?<![:]):no-translate\\s*\\[([\\s\\S]*?)\\]/g;\n\n return content.replace(inlineRegex, (_, innerContent) => {\n return innerContent;\n });\n}\n", "import type {LoaderContext} from '../loader';\nimport type Token from 'markdown-it/lib/token';\n\nimport MarkdownIt from 'markdown-it';\n// @ts-ignore\n// import meta from 'markdown-it-meta';\n// @ts-ignore\n// import sup from 'markdown-it-sup';\n// @ts-ignore\nimport deflist from 'markdown-it-deflist';\n// import cut from '@diplodoc/transform/lib/plugins/cut';\n// import checkbox from '@diplodoc/transform/lib/plugins/checkbox';\n// import monospace from '@diplodoc/transform/lib/plugins/monospace';\nimport imsize from '@diplodoc/transform/lib/plugins/imsize';\n// import file from '@diplodoc/transform/lib/plugins/file';\n// import video from '@diplodoc/transform/lib/plugins/video';\nimport yfmTable from '@diplodoc/transform/lib/plugins/table';\n\nfunction computeLineStarts(lines: string[]): number[] {\n const lineStarts: number[] = [0];\n for (let i = 1; i < lines.length; i++) {\n // const lineEndingLength = lines[i - 1].endsWith('\\r') ? 2 : 1;\n lineStarts[i] = lineStarts[i - 1] + lines[i - 1].length + 1;\n }\n return lineStarts;\n}\n\nconst lineToCharPosition = (line: number, lineStarts: number[], content: string): number =>\n line >= lineStarts.length ? content.length : lineStarts[line];\n\nfunction calculateAdjustedEnd(\n endLine: number,\n lineStarts: number[],\n lines: string[],\n content: string,\n): number {\n let end = content.length;\n if (endLine <= lineStarts.length) {\n end = endLine === 0 ? 0 : lineStarts[endLine - 1] + lines[endLine - 1].length;\n }\n return endLine <= lines.length && endLine > 0 ? end + 1 : end;\n}\n\n// Process block code tokens (fence and code_block)\nfunction processBlockCode(\n token: Token,\n lineStarts: number[],\n lines: string[],\n content: string,\n codes: Array<[number, number]>,\n) {\n if (!token.map || token.map.length !== 2) {\n return;\n }\n\n const [startLine, endLine] = token.map;\n\n const start = lineToCharPosition(startLine, lineStarts, content);\n\n let adjustedEnd: number;\n if (token.type === 'fence' && endLine <= lines.length) {\n const endLineContent = lines[endLine - 1] || '';\n const fenceEndIndex = endLineContent.indexOf(token.markup);\n if (fenceEndIndex > -1) {\n const lineStart = lineStarts[endLine - 1] || 0;\n const fenceEndPos = lineStart + fenceEndIndex + token.markup.length;\n adjustedEnd = fenceEndPos;\n } else {\n adjustedEnd = calculateAdjustedEnd(endLine, lineStarts, lines, content);\n }\n } else {\n adjustedEnd = calculateAdjustedEnd(endLine, lineStarts, lines, content);\n }\n\n codes.push([start, adjustedEnd]);\n}\n\n// Check specific attribute in image part\nfunction checkAttribute(\n imagePart: string,\n matchStart: number,\n codeText: string | null,\n start: number | undefined,\n end: number | undefined,\n regex: RegExp,\n getAttrStart: (matchStart: number, imagePart: string) => number,\n): boolean {\n const match = imagePart.match(regex);\n if (match) {\n if (codeText !== null) {\n // Check if code text is in attributes\n if (match[1].includes(codeText)) {\n return true;\n }\n } else if (start !== undefined && end !== undefined) {\n // Check if code range falls within attributes\n const attrStart = getAttrStart(matchStart, imagePart);\n const attrEnd = attrStart + match[0].length;\n if (start >= attrStart && end <= attrEnd) {\n return true;\n }\n }\n }\n return false;\n}\n\n// Check attributes in image part\nfunction checkImageAttributes(\n imagePart: string,\n matchStart: number,\n codeText: string | null,\n start?: number,\n end?: number,\n): {braceMatch: boolean; quoteMatch: boolean} {\n // Check attributes in curly braces {...}\n const braceMatch = checkAttribute(\n imagePart,\n matchStart,\n codeText,\n start,\n end,\n /\\s*{([^}]*)}/,\n (matchStart, imagePart) => matchStart + imagePart.indexOf('{'),\n );\n\n // Check title attribute in quotes \"...\"\n const quoteMatch = checkAttribute(\n imagePart,\n matchStart,\n codeText,\n start,\n end,\n /\\s*\"([^\"]*)\"/,\n (matchStart, imagePart) => matchStart + imagePart.indexOf('\"'),\n );\n\n return {braceMatch, quoteMatch};\n}\n\n// Add code to array and update position\nfunction addCodeAndUpdatePosition(\n startIndex: number,\n endIndex: number,\n content: string,\n codes: Array<[number, number]>,\n parentStartPos: number,\n): number {\n // Check if this code is inside image attributes\n const insideAttrs = isInsideImageAttributes(content, startIndex, endIndex);\n if (!insideAttrs) {\n codes.push([startIndex, endIndex]);\n }\n\n // Update parentStartPos to avoid finding the same match again\n return insideAttrs ? parentStartPos : Math.max(parentStartPos, endIndex);\n}\n\n// Process inline code tokens\nfunction processInlineCode(\n token: Token,\n content: string,\n parentStartPos: number,\n codes: Array<[number, number]>,\n lineStarts: number[],\n lines: string[],\n): number {\n if (!token.markup || !token.content) {\n return parentStartPos;\n }\n\n // Use token's position information if available\n if (token.map && token.map.length === 2) {\n const [startLine, _endLine] = token.map;\n const start = lineToCharPosition(startLine, lineStarts, content);\n\n // Find the exact position of the inline code within the line\n const lineContent = lines[startLine] || '';\n const searchPattern = token.markup + token.content + token.markup;\n const patternIndex = lineContent.indexOf(searchPattern);\n\n if (patternIndex !== -1) {\n const startIndex = start + patternIndex;\n const endIndex = startIndex + searchPattern.length;\n\n return addCodeAndUpdatePosition(startIndex, endIndex, content, codes, parentStartPos);\n }\n } else {\n const searchPattern = token.markup + token.content + token.markup;\n const startIndex = content.indexOf(searchPattern, parentStartPos);\n\n if (startIndex !== -1) {\n const endIndex = startIndex + searchPattern.length;\n\n return addCodeAndUpdatePosition(startIndex, endIndex, content, codes, parentStartPos);\n }\n }\n\n return parentStartPos;\n}\n\n// Function to check if code is inside image attributes\nfunction isInsideImageAttributes(content: string, start: number, end: number): boolean {\n // Regular expression to find images with attributes\n // Looking for pattern ![...](...) with optional \"title\" and/or {...} attributes\n // Considering multiline images with 's' flag (dotAll)\n const imageRegex = /!\\[[^\\]]*\\]\\([^)]*\\)(?:\\s*\"[^\"]*\")?(?:\\s*{[^}]*})?/gs;\n\n // First check if code is inside attributes of a specific image\n let match;\n while ((match = imageRegex.exec(content)) !== null) {\n // Start and end of the entire match\n const matchStart = match.index;\n const matchEnd = match.index + match[0].length;\n\n // Check if code range falls within this match\n if (start >= matchStart && end <= matchEnd) {\n // Now check if code is in attributes\n const imagePart = match[0];\n const {braceMatch, quoteMatch} = checkImageAttributes(\n imagePart,\n matchStart,\n null,\n start,\n end,\n );\n if (braceMatch || quoteMatch) {\n return true;\n }\n }\n }\n\n // Additional check: if code is in attributes of any image in the document,\n // then it should not be marked as code block\n const codeContent = content.substring(start, end);\n const codeText = codeContent.replace(/`/g, ''); // Remove backticks\n\n // Find all images in the document\n const allImagesRegex = /!\\[[^\\]]*\\]\\([^)]*\\)(?:\\s*\"[^\"]*\")?(?:\\s*{[^}]*})?/gs;\n let imageMatch;\n while ((imageMatch = allImagesRegex.exec(content)) !== null) {\n // Check if code is in image attributes\n const imagePart = imageMatch[0];\n const {braceMatch, quoteMatch} = checkImageAttributes(\n imagePart,\n imageMatch.index,\n codeText,\n );\n if (braceMatch || quoteMatch) {\n return true;\n }\n }\n\n // Additional check for YFM tables: if code is in one table cell,\n // and image in another cell of the same row, then code should not be marked as code block\n // Check if code is in YFM table context\n const lines = content.split('\\n');\n let lineIndex = 0;\n let charCount = 0;\n\n // Find the line where the code is located\n for (let i = 0; i < lines.length; i++) {\n if (charCount <= start && start < charCount + lines[i].length + 1) {\n lineIndex = i;\n break;\n }\n charCount += lines[i].length + 1;\n }\n\n // Check if line is in YFM table context\n if (lineIndex > 0 && lineIndex < lines.length - 1) {\n const prevLine = lines[lineIndex - 1];\n const currentLine = lines[lineIndex];\n const nextLine = lines[lineIndex + 1];\n\n // Check if previous line is table start\n if (prevLine.trim().startsWith('#|')) {\n // Check if next line is table end\n if (nextLine.trim().startsWith('|#')) {\n // Check if current line contains image\n if (currentLine.includes('![') && currentLine.includes('](')) {\n // In YFM table, if code is in one cell and image in another,\n // then code should not be marked as code block\n // We need to check if code is in the same line as image\n return true;\n }\n }\n }\n }\n\n return false;\n}\n\n// Process inline tokens that may contain inline code\nfunction processInlineToken(\n token: Token,\n lineStarts: number[],\n content: string,\n parentStartPos: number,\n): number {\n if (!token.children || token.children.length === 0) {\n return parentStartPos;\n }\n\n let inlineStartPos = parentStartPos;\n if (token.map && token.map.length === 2) {\n const [startLine] = token.map;\n inlineStartPos = lineToCharPosition(startLine, lineStarts, content);\n }\n\n return inlineStartPos;\n}\n\nexport function resolveBlockCodes(this: LoaderContext, content: string) {\n const md = new MarkdownIt({html: true});\n const diplodocOptions = {\n notesAutotitle: false,\n path: '',\n };\n\n // md.disable('text_join');\n // md.disable('entity');\n\n // md.use(meta, diplodocOptions);\n // md.use(cut, diplodocOptions);\n // md.use(sup, diplodocOptions);\n md.use(deflist, diplodocOptions);\n // md.use(checkbox, diplodocOptions);\n // md.use(monospace, diplodocOptions);\n md.use(imsize, diplodocOptions);\n // md.use(file, diplodocOptions);\n // md.use(video, diplodocOptions);\n md.use(yfmTable, diplodocOptions);\n\n const tokens = md.parse(content, {});\n\n const codes: Array<[number, number]> = [];\n\n const lines = content.split('\\n');\n const lineStarts = computeLineStarts(lines);\n\n function extractCodeBlocks(\n tokens: Token[],\n parentStartPos = 0,\n parentType: string | null = null,\n ) {\n for (const token of tokens) {\n let currentParentStartPos = parentStartPos;\n\n if (token.type === 'fence' || token.type === 'code_block') {\n processBlockCode(token, lineStarts, lines, content, codes);\n } else if (token.type === 'inline') {\n currentParentStartPos = processInlineToken(\n token,\n lineStarts,\n content,\n parentStartPos,\n );\n\n if (token.children && token.children.length > 0) {\n extractCodeBlocks(token.children, currentParentStartPos, token.type);\n }\n\n continue;\n } else if (token.type === 'code_inline') {\n // Skip code_inline tokens that are children of image tokens\n if (parentType !== 'image') {\n currentParentStartPos = processInlineCode(\n token,\n content,\n parentStartPos,\n codes,\n lineStarts,\n lines,\n );\n }\n }\n\n if (token.children && token.children.length > 0 && token.type !== 'inline') {\n extractCodeBlocks(token.children, currentParentStartPos, token.type);\n }\n }\n }\n\n extractCodeBlocks(tokens);\n\n this.api.blockCodes.set(codes);\n\n return content;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["parseLocalUrl", "parseLocalUrl", "rebasePath", "rebasePath", "matchStart", "imagePart", "tokens", "headings", "path"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diplodoc/cli",
3
- "version": "0.0.0-rc-resolve-codeblock-md2md-18975359297",
3
+ "version": "0.0.0-rc-resolve-codeblock-md2md-18994893059",
4
4
  "description": "Make documentation using yfm-docs in Markdown and HTML formats",
5
5
  "keywords": [
6
6
  "markdown",
@@ -78,7 +78,7 @@
78
78
  "dependencies": {
79
79
  "@diplodoc/client": "^4.1.1",
80
80
  "@diplodoc/liquid": "^1.3.4",
81
- "@diplodoc/transform": "^4.63.2",
81
+ "@diplodoc/transform": "^4.63.6",
82
82
  "@diplodoc/translation": "^1.7.17",
83
83
  "chalk": "^4.1.2",
84
84
  "commander": "^12.0.0",