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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | 1x 8x 8x 8x 28x 14x 14x 56x 19x 19x 19x 9x 9x 10x 10x 10x 37x | import type { Plugin, Pluggable } from 'unified';
import type { Root, RootContent, Literal } from 'hast';
import { visit } from 'unist-util-visit';
/**
* Raw string of HTML embedded into HTML AST.
*/
export interface Raw extends Literal {
/**
* Node type.
*/
type: 'raw'
}
// Register nodes in content.
declare module 'hast' {
interface RootContentMap {
/**
* Raw string of HTML embedded into HTML AST.
*/
raw: Raw
}
interface ElementContentMap {
/**
* Raw string of HTML embedded into HTML AST.
*/
raw: Raw
}
}
export type RehypeIgnoreOptions = {
/**
* Character to use for opening delimiter, by default `rehype:ignore:start`
*/
openDelimiter?: string;
/**
* Character to use for closing delimiter, by default `rehype:ignore:end`
*/
closeDelimiter?: string;
}
const rehypeIgnore: Plugin<[RehypeIgnoreOptions?], Root> = (options = {}) => {
const { openDelimiter = 'rehype:ignore:start', closeDelimiter = 'rehype:ignore:end' } = options;
return (tree) => {
visit(tree, (node: Root | RootContent, index, parent) => {
if (node.type === 'element' || node.type === 'root') {
// const start = node.children.findIndex((item) => item.type === 'comment' && item.value === openDelimiter);
// const end = node.children.findIndex((item) => item.type === 'comment' && item.value === closeDelimiter);
// if (start > -1 && end > -1) {
// node.children = node.children.filter((_, idx) => idx < start || idx > end);
// }
let start = false;
node.children = node.children.filter((item) => {
if (item.type === 'raw' || item.type === 'comment') {
let str = (item.value || '').trim();
str = str.replace(/^<!--(.*?)-->/, '$1')
if (str === openDelimiter) {
start = true;
return false;
}
Eif (str === closeDelimiter) {
start = false;
return false;
}
}
return !start;
})
}
});
}
}
export default rehypeIgnore;
|