Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 1x 4x 3x 2x 1x 1x 4x 1x 9x 9x 9x 7x 3x 3x 2x 4x 3x 4x 17x | import { Plugin } from 'unified';
import { Root, Element, ElementContent, RootContent } from 'hast';
import { visit } from 'unist-util-visit';
import { selectAll } from 'hast-util-select';
import { Test } from 'unist-util-is';
/** Get the node tree source code string */
export const getCodeString = (data: ElementContent[] = [], code: string = '') => {
data.forEach((node) => {
if (node.type === 'text') {
code += node.value;
} else Eif (node.type === 'element' && node.children && Array.isArray(node.children)) {
code += getCodeString(node.children);
}
});
return code;
};
export type RehypeRewriteOptions = {
/**
* Select an element to be wrapped. Expects a string selector that can be passed to hast-util-select ([supported selectors](https://github.com/syntax-tree/hast-util-select/blob/master/readme.md#support)).
* If `selector` is not set then wrap will check for a body all elements.
*/
selector?: string;
/** Rewrite Element. */
rewrite(node: Root | RootContent, index?: number, parent?: Root | Element): void;
}
const remarkRewrite: Plugin<[RehypeRewriteOptions?], Root> = (options) => {
const { selector, rewrite } = options || {};
return (tree) => {
if (!rewrite || typeof rewrite !== 'function') return;
if (selector && typeof selector === 'string') {
const selected = selectAll(selector, tree);
if (selected && selected.length > 0) {
visit(tree, selected as unknown as Test, (node: Element, index, parent) => {
rewrite(node, index, parent);
});
}
return;
}
visit(tree, (node: Root | RootContent, index, parent) => {
rewrite(node, index, parent);
});
}
}
export default remarkRewrite;
|