56 lines
1.2 KiB
JavaScript
56 lines
1.2 KiB
JavaScript
// src/handle.ts
|
|
handleMark.peek = peekMark;
|
|
var constructsWithoutHighlightMark = [
|
|
"autolink",
|
|
"destinationLiteral",
|
|
"destinationRaw",
|
|
"reference",
|
|
"titleQuote",
|
|
"titleApostrophe"
|
|
];
|
|
var highlightMarkFromMarkdown = {
|
|
canContainEols: ["highlight"],
|
|
enter: { highlight: enterHighlight },
|
|
exit: { highlight: exitHighlight }
|
|
};
|
|
function enterHighlight(token) {
|
|
this.enter({ type: "highlight", children: [] }, token);
|
|
}
|
|
function exitHighlight(token) {
|
|
this.exit(token);
|
|
}
|
|
var highlightMarkToMarkdown = {
|
|
unsafe: [
|
|
{
|
|
character: "=",
|
|
inConstruct: "phrasing",
|
|
notInConstruct: constructsWithoutHighlightMark
|
|
}
|
|
],
|
|
handlers: { highlight: handleMark }
|
|
};
|
|
function handleMark(node, _, state, info) {
|
|
const marker = "=";
|
|
const tracker = state.createTracker(info);
|
|
const exit = state.enter("highlight");
|
|
let value = tracker.move(marker + marker);
|
|
value += tracker.move(
|
|
//@ts-expect-error ignore error
|
|
state.containerPhrasing(node, {
|
|
before: value,
|
|
after: marker,
|
|
...tracker.current()
|
|
})
|
|
);
|
|
value += tracker.move(marker + marker);
|
|
exit();
|
|
return value;
|
|
}
|
|
function peekMark() {
|
|
return "=";
|
|
}
|
|
export {
|
|
highlightMarkFromMarkdown,
|
|
highlightMarkToMarkdown
|
|
};
|