import type { Plugin } from 'unified'; import { VFile } from 'vfile'; import type { CrossReference } from 'myst-spec'; import type { Container, Heading, Math, MathGroup, IndexEntry } from 'myst-spec-ext'; import type { GenericParent } from 'myst-common'; import { TargetKind } from 'myst-common'; import type { LinkTransformer } from './links/types.js'; import type { PageFrontmatter, Numbering } from 'myst-frontmatter'; type ResolvableCrossReference = Omit & { kind?: TargetKind | string; enumerator?: string; template?: string; resolved?: boolean; remote?: boolean; url?: string; dataUrl?: string; html_id?: string; }; export declare enum ReferenceKind { ref = "ref", numref = "numref", eq = "eq" } type TargetNodes = (Container | Math | MathGroup | Heading) & { html_id: string; subcontainer?: boolean; parentEnumerator?: string; indexEntries?: IndexEntry[]; }; export type Target = { node: TargetNodes; kind: TargetKind | string; }; export type TargetCounts = { heading: (number | null)[]; } & Record; export type StateOptions = { state: ReferenceState; hidden?: boolean; }; export type StateResolverOptions = { state: IReferenceStateResolver; transformers?: LinkTransformer[]; }; /** * Increment heading counts based on depth to increment * * depth is the depth to increment * counts is a list of 6 counts, corresponding to 6 heading depths * * When a certain depth is incremented, shallower depths are left the same * and deeper depths are reset to zero. Null counts anywhere are ignored. */ export declare function incrementHeadingCounts(depth: number, counts: (number | null)[]): (number | null)[]; /** * Return dot-delimited header numbering based on heading counts * * counts is a list of 6 counts, corresponding to 6 heading depths * * Leading zeros are kept, trailing zeros are removed, nulls are ignored. */ export declare function formatHeadingEnumerator(counts: (number | null)[], prefix?: string): string; export declare function initializeTargetCounts(numbering: Numbering, previousCounts?: TargetCounts, offset?: number): TargetCounts; export interface IReferenceStateResolver { vfile: VFile; /** * If the page is provided, it will only look at that page. */ getTarget: (identifier?: string, page?: string) => Target | undefined; getAllTargets: () => Target[]; getFileTarget: (identifier?: string) => ReferenceState | undefined; getIdentifiers: () => string[]; resolveReferenceContent: (node: ResolvableCrossReference) => void; resolveStateProvider: (identifier?: string, page?: string) => ReferenceState | undefined; } export declare class ReferenceState implements IReferenceStateResolver { vfile: VFile; filePath: string; url?: string; title?: string; dataUrl?: string; numbering: Numbering; targets: Record; targetCounts: TargetCounts; identifiers: string[]; enumerator?: string; offset: number; constructor(filePath: string, opts?: { frontmatter?: PageFrontmatter; url?: string; dataUrl?: string; previousCounts?: TargetCounts; identifiers?: string[]; vfile: VFile; hidden?: boolean; }); addTarget(node: TargetNodes, hidden?: boolean): void; resolveEnumerator(val: any, enumerator?: string): string; /** * Increment target count state for container/equation nodes * * Updates node `enumerator` in place. * * If node is subcontainer/subequation, a sub-count is incremented */ incrementCount(node: TargetNodes, kind: TargetKind | string): string; resolveStateProvider(identifier?: string, page?: string): ReferenceState | undefined; getIdentifiers(): string[]; getTarget(identifier?: string): Target | undefined; getAllTargets(): Target[]; getFileTarget(identifier?: string): ReferenceState | undefined; resolveReferenceContent(node: ResolvableCrossReference): void; } export declare function addChildrenFromTargetNode(node: ResolvableCrossReference, targetNode: TargetNodes, numbering?: Numbering, vfile?: VFile, offset?: number): void; export declare class MultiPageReferenceResolver implements IReferenceStateResolver { states: ReferenceState[]; filePath: string; vfile: VFile; constructor(states: ReferenceState[], filePath: string, vfile?: VFile); resolveStateProvider(identifier?: string, page?: string): ReferenceState | undefined; getIdentifiers(): string[]; getTarget(identifier?: string, page?: string): Target | undefined; getAllTargets(): Target[]; getFileTarget(identifier?: string): ReferenceState | undefined; resolveReferenceContent(node: ResolvableCrossReference): void; } export declare const enumerateTargetsTransform: (tree: GenericParent, opts: StateOptions) => GenericParent; export declare const enumerateTargetsPlugin: Plugin<[StateOptions], GenericParent, GenericParent>; /** Visit all containers and add captionNumber node to caption paragraph * * Requires container to be enumerated. * * By default, captionNumber is only added if caption already exists. * However, for sub-containers, captionNumber is always added. */ export declare function addContainerCaptionNumbersTransform(tree: GenericParent, file: VFile, opts: StateResolverOptions): void; export declare const resolveReferenceLinksTransform: (tree: GenericParent, opts: StateResolverOptions) => void; export declare const resolveUnlinkedCitations: (tree: GenericParent, opts: StateResolverOptions) => void; export declare const resolveCrossReferencesTransform: (tree: GenericParent, opts: StateResolverOptions) => void; export declare const resolveLinksAndCitationsTransform: (tree: GenericParent, opts: StateResolverOptions) => void; export declare const resolveReferencesTransform: (tree: GenericParent, file: VFile, opts: StateResolverOptions) => void; export declare const resolveReferencesPlugin: Plugin<[ StateResolverOptions ], GenericParent, GenericParent>; export {}; //# sourceMappingURL=enumerate.d.ts.map