prism-code-editor
Version:
Lightweight, extensible code editor component for the web using Prism
52 lines (51 loc) • 2.39 kB
TypeScript
/** @module code-folding */
import { Extension, PrismEditor } from "../../index.js";
/**
* Callback used to add extra foldable ranges to an editor.
* @param editor Editor the folding ranges are added to.
* @param currentFolds The ranges that are currently foldable.
* @returns An array of extra foldable ranges.
*/
export type FoldingRangeProvider = (editor: PrismEditor, currentFolds: [number, number][]) => [number, number][];
export interface ReadOnlyCodeFolding extends Extension {
/** The code in the editor with no ranges collapsed. */
readonly fullCode: string;
/**
* Toggles whether a range is folded. Does not cause a rerender so it's possible to
* toggle multiple folds simultaneously.
* @param lineNumber The line number of the fold.
* @param force If set to `true`, the range will only be folded.
* If `false`, the range will only be unfolded.
* If `undefined`, it will be toggled.
* @returns A boolean indicating whether or not a fold was toggled which means
* calling {@link updateFolds} in the near future is necessary.
*/
toggleFold(lineNumber: number, force?: boolean): boolean;
/** Call this after the {@link toggleFold} method to rerender the editor. */
updateFolds(): void;
}
/**
* Extension only supporting read-only editors which adds code folding to the editor.
*
* To fold XML elements, a {@link TagMatcher} needs to be added before.
*
* To fold bracket pairs, a {@link BracketMatcher} needs to be added before.
*
* @param providers Callbacks that can add extra foldable ranges.
* Very minimal downsides to adding this extension dynamically.
*/
declare const readOnlyCodeFolding: (...providers: FoldingRangeProvider[]) => ReadOnlyCodeFolding;
/**
* Folding range provider that allows folding of block comments. For this to work,
* you need to befine block comments in the {@link languageMap} for the language.
*
* Simply pass this function as one of the arguments when calling {@link readOnlyCodeFolding}.
*/
declare const blockCommentFolding: FoldingRangeProvider;
/**
* Folding range provider that allows folding of titles and code blocks in markdown.
*
* Simply pass this function as one of the arguments when calling {@link readOnlyCodeFolding}.
*/
declare const markdownFolding: FoldingRangeProvider;
export { readOnlyCodeFolding, markdownFolding, blockCommentFolding };